mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-22 13:34:43 +02:00
3-4 C3
This commit is contained in:
parent
2caf350f29
commit
d0f61c3dc5
@ -107,7 +107,7 @@
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>Mswsock.lib;Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
@ -121,7 +121,7 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>Mswsock.lib;Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -140,7 +140,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>Mswsock.lib;Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
@ -159,7 +159,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>Mswsock.lib;Ws2_32.lib;win32posix.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)bin\lib\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
|
@ -52,6 +52,7 @@ struct acceptEx_context {
|
||||
char lpOutputBuf[1024];
|
||||
SOCKET accept_socket;
|
||||
LPFN_ACCEPTEX lpfnAcceptEx;
|
||||
LPFN_GETACCEPTEXSOCKADDRS lpfnGuidGetAcceptExSockaddrs;
|
||||
DWORD bytes_received;
|
||||
};
|
||||
|
||||
@ -63,6 +64,7 @@ socketio_acceptEx(struct w32_io* pio) {
|
||||
debug2("io:%p", pio);
|
||||
if (pio->internal.context == NULL) {
|
||||
GUID GuidAcceptEx = WSAID_ACCEPTEX;
|
||||
GUID GuidGetAcceptExSockaddrs = WSAID_GETACCEPTEXSOCKADDRS;
|
||||
DWORD dwBytes;
|
||||
|
||||
context =
|
||||
@ -85,6 +87,20 @@ socketio_acceptEx(struct w32_io* pio) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SOCKET_ERROR == WSAIoctl(pio->sock,
|
||||
SIO_GET_EXTENSION_FUNCTION_POINTER,
|
||||
&GuidGetAcceptExSockaddrs, sizeof(GuidGetAcceptExSockaddrs),
|
||||
&context->lpfnGuidGetAcceptExSockaddrs, sizeof(context->lpfnGuidGetAcceptExSockaddrs),
|
||||
&dwBytes, NULL, NULL))
|
||||
{
|
||||
free(context);
|
||||
errno = errno_from_WSALastError();
|
||||
debug("ERROR:%d, io:%p", errno, pio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
context->accept_socket = INVALID_SOCKET;
|
||||
pio->internal.context = context;
|
||||
}
|
||||
@ -114,8 +130,8 @@ socketio_acceptEx(struct w32_io* pio) {
|
||||
context->accept_socket,
|
||||
context->lpOutputBuf,
|
||||
0,
|
||||
sizeof(struct sockaddr_in6) + 16,
|
||||
sizeof(struct sockaddr_in6) + 16,
|
||||
sizeof(SOCKADDR_STORAGE) + 16,
|
||||
sizeof(SOCKADDR_STORAGE) + 16,
|
||||
&context->bytes_received,
|
||||
&pio->read_overlapped))
|
||||
{
|
||||
@ -616,6 +632,8 @@ socketio_accept(struct w32_io* pio, struct sockaddr* addr, int* addrlen) {
|
||||
struct w32_io *accept_io = NULL;
|
||||
int iResult = 0;
|
||||
struct acceptEx_context* context;
|
||||
struct sockaddr *local_address,*remote_address;
|
||||
int local_address_len, remote_address_len;
|
||||
|
||||
debug2("io:%p", pio);
|
||||
/* start io if not already started */
|
||||
@ -676,7 +694,16 @@ socketio_accept(struct w32_io* pio, struct sockaddr* addr, int* addrlen) {
|
||||
context->accept_socket = INVALID_SOCKET;
|
||||
debug2("accept io:%p", accept_io);
|
||||
|
||||
/* TODO : fill in addr */
|
||||
if ((addr != NULL) && (addrlen != NULL)) {
|
||||
context->lpfnGuidGetAcceptExSockaddrs(context->lpOutputBuf, 0,
|
||||
sizeof(SOCKADDR_STORAGE) + 16,
|
||||
sizeof(SOCKADDR_STORAGE) + 16, &local_address,
|
||||
&local_address_len, &remote_address, &remote_address_len);
|
||||
if (remote_address_len) {
|
||||
memcpy(addr, remote_address, remote_address_len);
|
||||
addrlen = remote_address_len;
|
||||
}
|
||||
}
|
||||
return accept_io;
|
||||
|
||||
on_error:
|
||||
|
Loading…
x
Reference in New Issue
Block a user