mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
Make sure that the socket structure list does't accumulate duplicates.
svn path=/trunk/; revision=14360
This commit is contained in:
parent
8030aa9a2c
commit
f9a85ac5fb
2 changed files with 40 additions and 8 deletions
|
@ -412,6 +412,8 @@ PSOCKET_INFORMATION GetSocketStructure(
|
||||||
SOCKET Handle
|
SOCKET Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
|
VOID DeleteSocketStructure( SOCKET Handle );
|
||||||
|
|
||||||
int GetSocketInformation(
|
int GetSocketInformation(
|
||||||
PSOCKET_INFORMATION Socket,
|
PSOCKET_INFORMATION Socket,
|
||||||
ULONG AfdInformationClass,
|
ULONG AfdInformationClass,
|
||||||
|
|
|
@ -62,7 +62,7 @@ WSPSocket(
|
||||||
ULONG SizeOfEA;
|
ULONG SizeOfEA;
|
||||||
PAFD_CREATE_PACKET AfdPacket;
|
PAFD_CREATE_PACKET AfdPacket;
|
||||||
HANDLE Sock;
|
HANDLE Sock;
|
||||||
PSOCKET_INFORMATION Socket = NULL;
|
PSOCKET_INFORMATION Socket = NULL, PrevSocket = NULL;
|
||||||
PFILE_FULL_EA_INFORMATION EABuffer = NULL;
|
PFILE_FULL_EA_INFORMATION EABuffer = NULL;
|
||||||
PHELPER_DATA HelperData;
|
PHELPER_DATA HelperData;
|
||||||
PVOID HelperDLLContext;
|
PVOID HelperDLLContext;
|
||||||
|
@ -225,6 +225,16 @@ WSPSocket(
|
||||||
/* Save Handle */
|
/* Save Handle */
|
||||||
Socket->Handle = (SOCKET)Sock;
|
Socket->Handle = (SOCKET)Sock;
|
||||||
|
|
||||||
|
/* XXX See if there's a structure we can reuse -- We need to do this
|
||||||
|
* more properly. */
|
||||||
|
PrevSocket = GetSocketStructure( (SOCKET)Sock );
|
||||||
|
|
||||||
|
if( PrevSocket ) {
|
||||||
|
RtlCopyMemory( PrevSocket, Socket, sizeof(*Socket) );
|
||||||
|
RtlFreeHeap( GlobalHeap, 0, Socket );
|
||||||
|
Socket = PrevSocket;
|
||||||
|
}
|
||||||
|
|
||||||
/* Save Group Info */
|
/* Save Group Info */
|
||||||
if (g != 0) {
|
if (g != 0) {
|
||||||
GetSocketInformation(Socket, AFD_INFO_GROUP_ID_TYPE, 0, &GroupData);
|
GetSocketInformation(Socket, AFD_INFO_GROUP_ID_TYPE, 0, &GroupData);
|
||||||
|
@ -235,13 +245,13 @@ WSPSocket(
|
||||||
|
|
||||||
/* Get Window Sizes and Save them */
|
/* Get Window Sizes and Save them */
|
||||||
GetSocketInformation (Socket,
|
GetSocketInformation (Socket,
|
||||||
AFD_INFO_SEND_WINDOW_SIZE,
|
AFD_INFO_SEND_WINDOW_SIZE,
|
||||||
&Socket->SharedData.SizeOfSendBuffer,
|
&Socket->SharedData.SizeOfSendBuffer,
|
||||||
NULL);
|
NULL);
|
||||||
GetSocketInformation (Socket,
|
GetSocketInformation (Socket,
|
||||||
AFD_INFO_RECEIVE_WINDOW_SIZE,
|
AFD_INFO_RECEIVE_WINDOW_SIZE,
|
||||||
&Socket->SharedData.SizeOfRecvBuffer,
|
&Socket->SharedData.SizeOfRecvBuffer,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* Save in Process Sockets List */
|
/* Save in Process Sockets List */
|
||||||
Sockets[SocketCount] = Socket;
|
Sockets[SocketCount] = Socket;
|
||||||
|
@ -424,6 +434,7 @@ WSPCloseSocket(
|
||||||
|
|
||||||
/* Close the handle */
|
/* Close the handle */
|
||||||
NtClose((HANDLE)Handle);
|
NtClose((HANDLE)Handle);
|
||||||
|
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,6 +602,9 @@ WSPSelect(
|
||||||
( readfds ? readfds->fd_count : 0 ) +
|
( readfds ? readfds->fd_count : 0 ) +
|
||||||
( writefds ? writefds->fd_count : 0 ) +
|
( writefds ? writefds->fd_count : 0 ) +
|
||||||
( exceptfds ? exceptfds->fd_count : 0 );
|
( exceptfds ? exceptfds->fd_count : 0 );
|
||||||
|
|
||||||
|
if( HandleCount < 0 || nfds != 0 ) HandleCount = nfds * 3;
|
||||||
|
|
||||||
PollBufferSize = sizeof(*PollInfo) +
|
PollBufferSize = sizeof(*PollInfo) +
|
||||||
(HandleCount * sizeof(AFD_HANDLE));
|
(HandleCount * sizeof(AFD_HANDLE));
|
||||||
|
|
||||||
|
@ -987,7 +1001,7 @@ WSPAccept(
|
||||||
RtlCopyMemory (SocketAddress,
|
RtlCopyMemory (SocketAddress,
|
||||||
&ListenReceiveData->Address.Address[0].AddressType,
|
&ListenReceiveData->Address.Address[0].AddressType,
|
||||||
sizeof(*RemoteAddress));
|
sizeof(*RemoteAddress));
|
||||||
if( *SocketAddressLength )
|
if( SocketAddressLength )
|
||||||
*SocketAddressLength =
|
*SocketAddressLength =
|
||||||
ListenReceiveData->Address.Address[0].AddressLength;
|
ListenReceiveData->Address.Address[0].AddressLength;
|
||||||
}
|
}
|
||||||
|
@ -1287,6 +1301,12 @@ WSPGetSockName(
|
||||||
SocketAddress->Address[0].Address,
|
SocketAddress->Address[0].Address,
|
||||||
SocketAddress->Address[0].AddressLength);
|
SocketAddress->Address[0].AddressLength);
|
||||||
*NameLength = 2 + SocketAddress->Address[0].AddressLength;
|
*NameLength = 2 + SocketAddress->Address[0].AddressLength;
|
||||||
|
AFD_DbgPrint
|
||||||
|
(MID_TRACE,
|
||||||
|
("NameLength %d Address: %x Port %x\n",
|
||||||
|
*NameLength,
|
||||||
|
((struct sockaddr_in *)Name)->sin_addr.s_addr,
|
||||||
|
((struct sockaddr_in *)Name)->sin_port));
|
||||||
HeapFree(GlobalHeap, 0, TdiAddress);
|
HeapFree(GlobalHeap, 0, TdiAddress);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1365,6 +1385,13 @@ WSPGetPeerName(
|
||||||
RtlCopyMemory (Name->sa_data,
|
RtlCopyMemory (Name->sa_data,
|
||||||
SocketAddress->Address[0].Address,
|
SocketAddress->Address[0].Address,
|
||||||
SocketAddress->Address[0].AddressLength);
|
SocketAddress->Address[0].AddressLength);
|
||||||
|
*NameLength = 2 + SocketAddress->Address[0].AddressLength;
|
||||||
|
AFD_DbgPrint
|
||||||
|
(MID_TRACE,
|
||||||
|
("NameLength %d Address: %s Port %x\n",
|
||||||
|
*NameLength,
|
||||||
|
((struct sockaddr_in *)Name)->sin_addr.s_addr,
|
||||||
|
((struct sockaddr_in *)Name)->sin_port));
|
||||||
HeapFree(GlobalHeap, 0, TdiAddress);
|
HeapFree(GlobalHeap, 0, TdiAddress);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1684,6 +1711,9 @@ SetSocketInformation(
|
||||||
InfoData.Information.LargeInteger = *LargeInteger;
|
InfoData.Information.LargeInteger = *LargeInteger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AFD_DbgPrint(MID_TRACE,("XXX Info %x (Data %x)\n",
|
||||||
|
AfdInformationClass, *Ulong));
|
||||||
|
|
||||||
/* Send IOCTL */
|
/* Send IOCTL */
|
||||||
Status = NtDeviceIoControlFile( (HANDLE)Socket->Handle,
|
Status = NtDeviceIoControlFile( (HANDLE)Socket->Handle,
|
||||||
SockEvent,
|
SockEvent,
|
||||||
|
|
Loading…
Reference in a new issue