mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 05:26:58 +00:00
- Implement WSPGetSockName.
- Minor AFD fixes. svn path=/trunk/; revision=12014
This commit is contained in:
parent
57bdb75d51
commit
cfabacaaa5
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: connect.c,v 1.7 2004/12/04 23:29:54 arty Exp $
|
/* $Id: connect.c,v 1.8 2004/12/11 14:59:31 navaraf Exp $
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: drivers/net/afd/afd/connect.c
|
* FILE: drivers/net/afd/afd/connect.c
|
||||||
|
@ -191,7 +191,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
|
||||||
TdiBuildConnectionInfo
|
TdiBuildConnectionInfo
|
||||||
( &TargetAddress,
|
( &TargetAddress,
|
||||||
((PTRANSPORT_ADDRESS)&ConnectReq->RemoteAddress) );
|
&ConnectReq->RemoteAddress );
|
||||||
|
|
||||||
if( TargetAddress ) {
|
if( TargetAddress ) {
|
||||||
Status = TdiConnect( &FCB->PendingTdiIrp,
|
Status = TdiConnect( &FCB->PendingTdiIrp,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: info.c,v 1.5 2004/12/04 23:29:54 arty Exp $
|
/* $Id: info.c,v 1.6 2004/12/11 14:59:31 navaraf Exp $
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: drivers/net/afd/afd/info.c
|
* FILE: drivers/net/afd/afd/info.c
|
||||||
|
@ -60,3 +60,53 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
|
||||||
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE );
|
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
PIO_STACK_LOCATION IrpSp ) {
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||||
|
PAFD_FCB FCB = FileObject->FsContext;
|
||||||
|
PMDL Mdl;
|
||||||
|
|
||||||
|
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||||
|
|
||||||
|
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE );
|
||||||
|
|
||||||
|
if( FCB->AddressFile.Object == NULL) {
|
||||||
|
return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, 0,
|
||||||
|
NULL, FALSE );
|
||||||
|
}
|
||||||
|
|
||||||
|
Mdl = IoAllocateMdl
|
||||||
|
( Irp->UserBuffer,
|
||||||
|
IrpSp->Parameters.DeviceIoControl.OutputBufferLength,
|
||||||
|
FALSE,
|
||||||
|
FALSE,
|
||||||
|
NULL );
|
||||||
|
|
||||||
|
if( Mdl != NULL ) {
|
||||||
|
_SEH_TRY {
|
||||||
|
MmProbeAndLockPages( Mdl, Irp->RequestorMode, IoModifyAccess );
|
||||||
|
} _SEH_HANDLE {
|
||||||
|
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
} _SEH_END;
|
||||||
|
|
||||||
|
if( NT_SUCCESS(Status) ) {
|
||||||
|
Status = TdiQueryInformation
|
||||||
|
( FCB->AddressFile.Object,
|
||||||
|
TDI_QUERY_ADDRESS_INFO,
|
||||||
|
Mdl );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MmUnlockPages( Mdl ); */
|
||||||
|
IoFreeMdl( Mdl );
|
||||||
|
} else {
|
||||||
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
|
||||||
|
|
||||||
|
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE );
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: main.c,v 1.15 2004/12/04 23:29:54 arty Exp $
|
/* $Id: main.c,v 1.16 2004/12/11 14:59:31 navaraf Exp $
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: drivers/net/afd/afd/main.c
|
* FILE: drivers/net/afd/afd/main.c
|
||||||
|
@ -359,6 +359,9 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||||
case IOCTL_AFD_DISCONNECT:
|
case IOCTL_AFD_DISCONNECT:
|
||||||
return AfdDisconnect( DeviceObject, Irp, IrpSp );
|
return AfdDisconnect( DeviceObject, Irp, IrpSp );
|
||||||
|
|
||||||
|
case IOCTL_AFD_GET_SOCK_NAME:
|
||||||
|
return AfdGetSockName( DeviceObject, Irp, IrpSp );
|
||||||
|
|
||||||
case IOCTL_AFD_GET_TDI_HANDLES:
|
case IOCTL_AFD_GET_TDI_HANDLES:
|
||||||
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_GET_TDI_HANDLES\n"));
|
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_GET_TDI_HANDLES\n"));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: tdiconn.c,v 1.5 2004/11/15 18:24:57 arty Exp $
|
/* $Id: tdiconn.c,v 1.6 2004/12/11 14:59:31 navaraf Exp $
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: drivers/net/afd/afd/tdiconn.c
|
* FILE: drivers/net/afd/afd/tdiconn.c
|
||||||
|
@ -16,6 +16,7 @@ UINT TdiAddressSizeFromType( UINT AddressType ) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return sizeof(TA_IP_ADDRESS);
|
return sizeof(TA_IP_ADDRESS);
|
||||||
default:
|
default:
|
||||||
|
AFD_DbgPrint(MID_TRACE,("TdiAddressSizeFromType - invalid type: %x\n", AddressType));
|
||||||
KeBugCheck( 0 );
|
KeBugCheck( 0 );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: afd.h,v 1.26 2004/11/25 23:36:36 arty Exp $
|
/* $Id: afd.h,v 1.27 2004/12/11 14:59:31 navaraf Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -178,6 +178,10 @@ NTSTATUS STDCALL
|
||||||
AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
PIO_STACK_LOCATION IrpSp );
|
PIO_STACK_LOCATION IrpSp );
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
PIO_STACK_LOCATION IrpSp );
|
||||||
|
|
||||||
/* listen.c */
|
/* listen.c */
|
||||||
|
|
||||||
NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
|
|
@ -24,4 +24,9 @@ NTSTATUS TdiDisconnect
|
||||||
PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
|
PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
|
||||||
PTDI_CONNECTION_INFORMATION ReturnConnectionInfo );
|
PTDI_CONNECTION_INFORMATION ReturnConnectionInfo );
|
||||||
|
|
||||||
|
NTSTATUS TdiQueryInformation(
|
||||||
|
PFILE_OBJECT FileObject,
|
||||||
|
LONG QueryType,
|
||||||
|
PMDL MdlBuffer);
|
||||||
|
|
||||||
#endif/*_TDI_PROTO_H*/
|
#endif/*_TDI_PROTO_H*/
|
||||||
|
|
|
@ -554,7 +554,8 @@ NTSTATUS DispTdiQueryInformation(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MmGetMdlByteCount(Irp->MdlAddress) <
|
if (MmGetMdlByteCount(Irp->MdlAddress) <
|
||||||
(sizeof(TDI_ADDRESS_INFO) + sizeof(TDI_ADDRESS_IP))) {
|
(FIELD_OFFSET(TDI_ADDRESS_INFO, Address.Address[0].Address) +
|
||||||
|
sizeof(TDI_ADDRESS_IP))) {
|
||||||
TI_DbgPrint(MID_TRACE, ("MDL buffer too small.\n"));
|
TI_DbgPrint(MID_TRACE, ("MDL buffer too small.\n"));
|
||||||
return STATUS_BUFFER_OVERFLOW;
|
return STATUS_BUFFER_OVERFLOW;
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,6 +194,7 @@ typedef struct _AFD_DISCONNECT_INFO {
|
||||||
#define AFD_SEND_DATAGRAM 8
|
#define AFD_SEND_DATAGRAM 8
|
||||||
#define AFD_SELECT 9
|
#define AFD_SELECT 9
|
||||||
#define AFD_DISCONNECT 10
|
#define AFD_DISCONNECT 10
|
||||||
|
#define AFD_GET_SOCK_NAME 11
|
||||||
#define AFD_GET_TDI_HANDLES 13
|
#define AFD_GET_TDI_HANDLES 13
|
||||||
#define AFD_SET_INFO 14
|
#define AFD_SET_INFO 14
|
||||||
#define AFD_GET_CONTEXT 16
|
#define AFD_GET_CONTEXT 16
|
||||||
|
@ -240,6 +241,8 @@ typedef struct _AFD_DISCONNECT_INFO {
|
||||||
_AFD_CONTROL_CODE(AFD_SELECT, METHOD_BUFFERED )
|
_AFD_CONTROL_CODE(AFD_SELECT, METHOD_BUFFERED )
|
||||||
#define IOCTL_AFD_DISCONNECT \
|
#define IOCTL_AFD_DISCONNECT \
|
||||||
_AFD_CONTROL_CODE(AFD_DISCONNECT, METHOD_NEITHER)
|
_AFD_CONTROL_CODE(AFD_DISCONNECT, METHOD_NEITHER)
|
||||||
|
#define IOCTL_AFD_GET_SOCK_NAME \
|
||||||
|
_AFD_CONTROL_CODE(AFD_GET_SOCK_NAME, METHOD_NEITHER)
|
||||||
#define IOCTL_AFD_GET_TDI_HANDLES \
|
#define IOCTL_AFD_GET_TDI_HANDLES \
|
||||||
_AFD_CONTROL_CODE(AFD_GET_TDI_HANDLES, METHOD_NEITHER)
|
_AFD_CONTROL_CODE(AFD_GET_TDI_HANDLES, METHOD_NEITHER)
|
||||||
#define IOCTL_AFD_SET_INFO \
|
#define IOCTL_AFD_SET_INFO \
|
||||||
|
@ -389,17 +392,6 @@ typedef struct _FILE_REPLY_CONNECT {
|
||||||
INT Status;
|
INT Status;
|
||||||
} FILE_REPLY_CONNECT, *PFILE_REPLY_CONNECT;
|
} FILE_REPLY_CONNECT, *PFILE_REPLY_CONNECT;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _FILE_REQUEST_GETNAME {
|
|
||||||
BOOL Peer;
|
|
||||||
} FILE_REQUEST_GETNAME, *PFILE_REQUEST_GETNAME;
|
|
||||||
|
|
||||||
typedef struct _FILE_REPLY_GETNAME {
|
|
||||||
INT Status;
|
|
||||||
SOCKADDR Name;
|
|
||||||
INT NameSize;
|
|
||||||
} FILE_REPLY_GETNAME, *PFILE_REPLY_GETNAME;
|
|
||||||
|
|
||||||
#endif /*__AFD_SHARED_H */
|
#endif /*__AFD_SHARED_H */
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -335,9 +335,10 @@ WSPBind(
|
||||||
/* Set up Address in TDI Format */
|
/* Set up Address in TDI Format */
|
||||||
BindData->Address.TAAddressCount = 1;
|
BindData->Address.TAAddressCount = 1;
|
||||||
BindData->Address.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
|
BindData->Address.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
|
||||||
RtlCopyMemory (&BindData->Address.Address[0].AddressType,
|
BindData->Address.Address[0].AddressType = SocketAddress->sa_family;
|
||||||
SocketAddress,
|
RtlCopyMemory (BindData->Address.Address[0].Address,
|
||||||
SocketAddressLength);
|
SocketAddress->sa_data,
|
||||||
|
SocketAddressLength - sizeof(SocketAddress->sa_family));
|
||||||
|
|
||||||
/* Get Address Information */
|
/* Get Address Information */
|
||||||
Socket->HelperData->WSHGetSockaddrType ((PSOCKADDR)SocketAddress,
|
Socket->HelperData->WSHGetSockaddrType ((PSOCKADDR)SocketAddress,
|
||||||
|
@ -519,7 +520,7 @@ WSPSelect(
|
||||||
|
|
||||||
/* Wait for Completition */
|
/* Wait for Completition */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
WaitForSingleObject(SockEvent, 0);
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear the Structures */
|
/* Clear the Structures */
|
||||||
|
@ -881,9 +882,10 @@ WSPConnect(
|
||||||
/* Set up Address in TDI Format */
|
/* Set up Address in TDI Format */
|
||||||
ConnectInfo->RemoteAddress.TAAddressCount = 1;
|
ConnectInfo->RemoteAddress.TAAddressCount = 1;
|
||||||
ConnectInfo->RemoteAddress.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
|
ConnectInfo->RemoteAddress.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
|
||||||
RtlCopyMemory (&ConnectInfo->RemoteAddress.Address[0].AddressType,
|
ConnectInfo->RemoteAddress.Address[0].AddressType = SocketAddress->sa_family;
|
||||||
SocketAddress,
|
RtlCopyMemory (ConnectInfo->RemoteAddress.Address[0].Address,
|
||||||
SocketAddressLength);
|
SocketAddress->sa_data,
|
||||||
|
SocketAddressLength - sizeof(SocketAddress->sa_family));
|
||||||
|
|
||||||
/* Tell AFD that we want Connection Data back, have it allocate a buffer */
|
/* Tell AFD that we want Connection Data back, have it allocate a buffer */
|
||||||
if (lpCalleeData != NULL) {
|
if (lpCalleeData != NULL) {
|
||||||
|
@ -997,7 +999,7 @@ WSPShutdown(
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
WaitForSingleObject(SockEvent, 0);
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Ending\n"));
|
AFD_DbgPrint(MID_TRACE,("Ending\n"));
|
||||||
|
@ -1011,12 +1013,78 @@ WSPShutdown(
|
||||||
INT
|
INT
|
||||||
WSPAPI
|
WSPAPI
|
||||||
WSPGetSockName(
|
WSPGetSockName(
|
||||||
IN SOCKET s,
|
IN SOCKET Handle,
|
||||||
OUT LPSOCKADDR name,
|
OUT LPSOCKADDR Name,
|
||||||
IN OUT LPINT namelen,
|
IN OUT LPINT NameLength,
|
||||||
OUT LPINT lpErrno)
|
OUT LPINT lpErrno)
|
||||||
{
|
{
|
||||||
|
IO_STATUS_BLOCK IOSB;
|
||||||
|
ULONG TdiAddressSize;
|
||||||
|
PTDI_ADDRESS_INFO TdiAddress;
|
||||||
|
PTRANSPORT_ADDRESS SocketAddress;
|
||||||
|
PSOCKET_INFORMATION Socket = NULL;
|
||||||
|
NTSTATUS Status;
|
||||||
|
HANDLE SockEvent;
|
||||||
|
|
||||||
|
Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
|
||||||
|
NULL, 1, FALSE );
|
||||||
|
|
||||||
|
if( !NT_SUCCESS(Status) ) return SOCKET_ERROR;
|
||||||
|
|
||||||
|
/* Get the Socket Structure associate to this Socket*/
|
||||||
|
Socket = GetSocketStructure(Handle);
|
||||||
|
|
||||||
|
/* Allocate a buffer for the address */
|
||||||
|
TdiAddressSize = FIELD_OFFSET(TDI_ADDRESS_INFO,
|
||||||
|
Address.Address[0].Address) +
|
||||||
|
Socket->SharedData.SizeOfLocalAddress;
|
||||||
|
TdiAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
|
||||||
|
|
||||||
|
if ( TdiAddress == NULL ) {
|
||||||
|
NtClose( SockEvent );
|
||||||
|
*lpErrno = WSAENOBUFS;
|
||||||
|
return SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
SocketAddress = &TdiAddress->Address;
|
||||||
|
|
||||||
|
/* Send IOCTL */
|
||||||
|
Status = NtDeviceIoControlFile( (HANDLE)Socket->Handle,
|
||||||
|
SockEvent,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
&IOSB,
|
||||||
|
IOCTL_AFD_GET_SOCK_NAME,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
TdiAddress,
|
||||||
|
TdiAddressSize);
|
||||||
|
|
||||||
|
/* Wait for return */
|
||||||
|
if (Status == STATUS_PENDING) {
|
||||||
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
|
Status = IOSB.Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
NtClose( SockEvent );
|
||||||
|
|
||||||
|
if (NT_SUCCESS(Status)) {
|
||||||
|
if (*NameLength >= SocketAddress->Address[0].AddressLength) {
|
||||||
|
Name->sa_family = SocketAddress->Address[0].AddressType;
|
||||||
|
RtlCopyMemory (Name->sa_data,
|
||||||
|
SocketAddress->Address[0].Address,
|
||||||
|
SocketAddress->Address[0].AddressLength);
|
||||||
|
HeapFree(GlobalHeap, 0, TdiAddress);
|
||||||
return 0;
|
return 0;
|
||||||
|
} else {
|
||||||
|
HeapFree(GlobalHeap, 0, TdiAddress);
|
||||||
|
*lpErrno = WSAEFAULT;
|
||||||
|
return SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MsafdReturnWithErrno
|
||||||
|
( IOSB.Status, lpErrno, 0, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1193,7 +1261,7 @@ GetSocketInformation(
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
WaitForSingleObject(SockEvent, 0);
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return Information */
|
/* Return Information */
|
||||||
|
@ -1249,7 +1317,7 @@ SetSocketInformation(
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
WaitForSingleObject(SockEvent, 0);
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
NtClose( SockEvent );
|
NtClose( SockEvent );
|
||||||
|
@ -1308,7 +1376,7 @@ int CreateContext(PSOCKET_INFORMATION Socket)
|
||||||
|
|
||||||
/* Wait for Completition */
|
/* Wait for Completition */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
WaitForSingleObject(SockEvent, 0);
|
WaitForSingleObject(SockEvent, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
NtClose( SockEvent );
|
NtClose( SockEvent );
|
||||||
|
|
|
@ -321,7 +321,7 @@ WSPRecvFrom(
|
||||||
|
|
||||||
/* Wait for completition of not overlapped */
|
/* Wait for completition of not overlapped */
|
||||||
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
||||||
WaitForSingleObject(SockEvent, 0); // BUGBUG, shouldn wait infintely for receive...
|
WaitForSingleObject(SockEvent, INFINITE); // BUGBUG, shouldn wait infintely for receive...
|
||||||
Status = IOSB->Status;
|
Status = IOSB->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,7 +437,7 @@ WSPSend(
|
||||||
|
|
||||||
/* Wait for completition of not overlapped */
|
/* Wait for completition of not overlapped */
|
||||||
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
||||||
WaitForSingleObject(SockEvent, 0); // BUGBUG, shouldn wait infintely for send...
|
WaitForSingleObject(SockEvent, INFINITE); // BUGBUG, shouldn wait infintely for send...
|
||||||
Status = IOSB->Status;
|
Status = IOSB->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,7 +563,7 @@ WSPSendTo(
|
||||||
|
|
||||||
/* Wait for completition of not overlapped */
|
/* Wait for completition of not overlapped */
|
||||||
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
if (Status == STATUS_PENDING && lpOverlapped == NULL) {
|
||||||
WaitForSingleObject(SockEvent, 0); // BUGBUG, shouldn wait infintely for send...
|
WaitForSingleObject(SockEvent, INFINITE); // BUGBUG, shouldn wait infintely for send...
|
||||||
Status = IOSB->Status;
|
Status = IOSB->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue