Ignore:
Timestamp:
Jul 10, 2006 9:35:27 PM (18 years ago)
Author:
bennylp
Message:

Fixed several bugs in WinNT IOCP: (1) accept() does not return correct addresses, (2) handle error condition when accept() returns -1 as the new socket

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/ioqueue_winnt.c

    r582 r599  
    2727#include <pj/assert.h> 
    2828#include <pj/errno.h> 
     29#include <pj/compat/socket.h> 
    2930 
    3031 
     
    174175                          &remote, 
    175176                          &remotelen); 
    176     if (*accept_overlapped->addrlen > locallen) { 
     177    if (*accept_overlapped->addrlen >= locallen) { 
    177178        pj_memcpy(accept_overlapped->local, local, locallen); 
    178179        pj_memcpy(accept_overlapped->remote, remote, locallen); 
     
    628629            if (key->cb.on_accept_complete) { 
    629630                ioqueue_accept_rec *accept_rec = (ioqueue_accept_rec*)pOv; 
     631                pj_status_t status = PJ_SUCCESS; 
     632 
     633                if (accept_rec->newsock == PJ_INVALID_SOCKET) { 
     634                    int dwError = WSAGetLastError(); 
     635                    if (dwError == 0) dwError = OSERR_ENOTCONN; 
     636                    status = PJ_RETURN_OS_ERROR(dwError); 
     637                } 
     638 
    630639                key->cb.on_accept_complete(key,  
    631640                                           (pj_ioqueue_op_key_t*)pOv,  
    632641                                           accept_rec->newsock, 
    633                                            PJ_SUCCESS); 
     642                                           status); 
    634643                accept_rec->newsock = PJ_INVALID_SOCKET; 
    635644            } 
Note: See TracChangeset for help on using the changeset viewer.