- Fix translation for OSK_EAGAIN/OSK_EWOULDBLOCK
authorCameron Gutman <aicommander@gmail.com>
Sat, 31 Oct 2009 15:53:19 +0000 (15:53 +0000)
committerCameron Gutman <aicommander@gmail.com>
Sat, 31 Oct 2009 15:53:19 +0000 (15:53 +0000)
 - Don't clear other socket state flags when enabling non-blocking mode
 - Remove some incorrect code that plays tricks on oskittcp

svn path=/trunk/; revision=43877

reactos/lib/drivers/ip/transport/tcp/tcp.c
reactos/lib/drivers/oskittcp/oskittcp/interface.c

index e195ff5..6768536 100644 (file)
@@ -559,12 +559,12 @@ NTSTATUS TCPTranslateError( int OskitError ) {
 
     switch( OskitError ) {
     case 0: Status = STATUS_SUCCESS; break;
 
     switch( OskitError ) {
     case 0: Status = STATUS_SUCCESS; break;
-    case OSK_EADDRNOTAVAIL:
+    case OSK_EADDRNOTAVAIL: Status = STATUS_INVALID_ADDRESS; break;
     case OSK_EAFNOSUPPORT: Status = STATUS_INVALID_CONNECTION; break;
     case OSK_ECONNREFUSED:
     case OSK_ECONNRESET: Status = STATUS_REMOTE_NOT_LISTENING; break;
     case OSK_EAFNOSUPPORT: Status = STATUS_INVALID_CONNECTION; break;
     case OSK_ECONNREFUSED:
     case OSK_ECONNRESET: Status = STATUS_REMOTE_NOT_LISTENING; break;
+    case OSK_EWOULDBLOCK:
     case OSK_EINPROGRESS: Status = STATUS_PENDING; break;
     case OSK_EINPROGRESS: Status = STATUS_PENDING; break;
-    case OSK_EWOULDBLOCK: Status = STATUS_CANT_WAIT; break;
     case OSK_EINVAL: Status = STATUS_INVALID_PARAMETER; break;
     case OSK_ENOMEM:
     case OSK_ENOBUFS: Status = STATUS_INSUFFICIENT_RESOURCES; break;
     case OSK_EINVAL: Status = STATUS_INVALID_PARAMETER; break;
     case OSK_ENOMEM:
     case OSK_ENOBUFS: Status = STATUS_INSUFFICIENT_RESOURCES; break;
index bcb6bc4..3047d5b 100644 (file)
@@ -118,11 +118,7 @@ int OskitTCPSocket( void *context,
     int error = socreate(domain, &so, type, proto);
     if( !error ) {
        so->so_connection = context;
     int error = socreate(domain, &so, type, proto);
     if( !error ) {
        so->so_connection = context;
-       so->so_state = SS_NBIO;
-       so->so_error = 0;
-        so->so_q = so->so_q0 = NULL;
-        so->so_qlen = 0;
-        so->so_head = NULL;
+       so->so_state |= SS_NBIO;
        *aso = so;
     }
     return error;
        *aso = so;
     }
     return error;
@@ -138,8 +134,6 @@ int OskitTCPRecv( void *connection,
     int error = 0;
     int tcp_flags = 0;
 
     int error = 0;
     int tcp_flags = 0;
 
-    *OutLen = 0;
-
     OS_DbgPrint(OSK_MID_TRACE,
                 ("so->so_state %x\n", ((struct socket *)connection)->so_state));
 
     OS_DbgPrint(OSK_MID_TRACE,
                 ("so->so_state %x\n", ((struct socket *)connection)->so_state));
 
@@ -147,21 +141,21 @@ int OskitTCPRecv( void *connection,
     if( Flags & OSK_MSG_DONTWAIT ) tcp_flags |= MSG_DONTWAIT;
     if( Flags & OSK_MSG_PEEK )     tcp_flags |= MSG_PEEK;
 
     if( Flags & OSK_MSG_DONTWAIT ) tcp_flags |= MSG_DONTWAIT;
     if( Flags & OSK_MSG_PEEK )     tcp_flags |= MSG_PEEK;
 
-    uio.uio_resid = Len;
-    uio.uio_iov = &iov;
-    uio.uio_rw = UIO_READ;
-    uio.uio_iovcnt = 1;
     iov.iov_len = Len;
     iov.iov_base = (char *)Data;
     iov.iov_len = Len;
     iov.iov_base = (char *)Data;
+    uio.uio_iov = &iov;
+    uio.uio_iovcnt = 1;
+    uio.uio_offset = 0;
+    uio.uio_resid = Len;
+    uio.uio_segflg = UIO_SYSSPACE;
+    uio.uio_rw = UIO_READ;
+    uio.uio_procp = NULL;
 
     OS_DbgPrint(OSK_MID_TRACE,("Reading %d bytes from TCP:\n", Len));
 
     error = soreceive( connection, NULL, &uio, NULL, NULL /* SCM_RIGHTS */,
                       &tcp_flags );
 
     OS_DbgPrint(OSK_MID_TRACE,("Reading %d bytes from TCP:\n", Len));
 
     error = soreceive( connection, NULL, &uio, NULL, NULL /* SCM_RIGHTS */,
                       &tcp_flags );
-
-    if( error == 0 ) {
-       *OutLen = Len - uio.uio_resid;
-    }
+    *OutLen = Len - uio.uio_resid;
 
     return error;
 }
 
     return error;
 }
@@ -280,10 +274,7 @@ int OskitTCPSend( void *socket, OSK_PCHAR Data, OSK_UINT Len,
     uio.uio_procp = NULL;
 
     error = sosend( socket, NULL, &uio, NULL, NULL, 0 );
     uio.uio_procp = NULL;
 
     error = sosend( socket, NULL, &uio, NULL, NULL, 0 );
-    if (OSK_EWOULDBLOCK == error) {
-       ((struct socket *) socket)->so_snd.sb_flags |= SB_WAIT;
-    }
-    *OutLen = uio.uio_offset;
+    *OutLen = Len - uio.uio_resid;
 
     return error;
 }
 
     return error;
 }