Skip to content

Commit

Permalink
Fixing error when window socket receives OOB
Browse files Browse the repository at this point in the history
  • Loading branch information
tesonep committed Mar 14, 2022
1 parent e238f9c commit 8267368
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 25 deletions.
19 changes: 12 additions & 7 deletions extracted/plugins/SocketPlugin/src/common/SocketPluginImpl.c
Original file line number Diff line number Diff line change
Expand Up @@ -599,12 +599,17 @@ static void dataHandler(int fd, void *data, int flags)
if (flags & AIO_R)
{
int n= socketReadable(fd, pss->socketType);
if (n == 0)
{
logTrace("dataHandler: selected socket fd=%d flags=0x%x would block (why?)\n", fd, flags);
}
if (n != 1)
{
if (n == 0){
//Maybe getting OOB data
char buf[1];
int n= recv(fd, (void *)buf, 1, MSG_OOB);
if (n == 1) logTrace("socket: received OOB data: %02x\n", buf[0]);

//If the socket is not readable, we need to continue waiting.
aioHandle(fd, dataHandler, AIO_RX);
return;
}
if (n != 1){
pss->sockError= socketError(fd);
pss->sockState= OtherEndClosed;
}
Expand Down Expand Up @@ -2465,4 +2470,4 @@ sqInt sqSocketReceiveUDPDataBufCount(SocketPtr s, char *buf, sqInt bufSize)
}
success(false);
return 0;
}
}
40 changes: 22 additions & 18 deletions extracted/vm/src/win/aioWin.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,20 @@ long aioFileDescriptor_numberOfHandles(){
return count;
}

EXPORT(void) aioFileDescriptor_printHandlers(){
AioFileDescriptor* element = fileDescriptorList;
long count = 0;

printf("List of registered aioHandlers\n");
printf("==============================\n\n");

while(element){
printf("FD: %d Mask: %d Flags: %d ClientData %p handlerFn %p\n", element->fd, element->mask, element->flags, element->clientData, element->handlerFn);
element = element->next;
}

}

void aioFileDescriptor_fillHandles(HANDLE* handles){
AioFileDescriptor* element = fileDescriptorList;
long index = 0;
Expand Down Expand Up @@ -144,15 +158,10 @@ void aioFileDescriptor_signal_withHandle(HANDLE event){
/**
* The event should be reset once it has been processed.
*/
if((element->flags & AIO_EXT) == 0){
WSAResetEvent(element->readEvent);

if(element->mask == 0) {
return;
}
//We set the event to 0 so it is not recalled after
WSAEventSelect(element->fd, element->readEvent, 0);
}
WSAResetEvent(element->readEvent);

//We set the event to 0 so it is not recalled after
WSAEventSelect(element->fd, element->readEvent, 0);

element->handlerFn(element->fd, element->clientData, AIO_R);
return;
Expand All @@ -163,15 +172,10 @@ void aioFileDescriptor_signal_withHandle(HANDLE event){
/**
* The event should be reset once it has been processed.
*/
if((element->flags & AIO_EXT) == 0){
WSAResetEvent(element->writeEvent);

if(element->mask == 0) {
return;
}
//We set the event to 0 so it is not recalled after
WSAEventSelect(element->fd, element->writeEvent, 0);
}
WSAResetEvent(element->writeEvent);

//We set the event to 0 so it is not recalled after
WSAEventSelect(element->fd, element->writeEvent, 0);

element->handlerFn(element->fd, element->clientData, AIO_W);
return;
Expand Down

0 comments on commit 8267368

Please sign in to comment.