Ignore:
Timestamp:
Oct 27, 1999, 1:59:20 AM (26 years ago)
Author:
phaller
Message:

Fix: socket operation return codes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wsock32/wsock32.cpp

    r1385 r1466  
    1 /* $Id: wsock32.cpp,v 1.9 1999-10-20 20:41:54 phaller Exp $ */
     1/* $Id: wsock32.cpp,v 1.10 1999-10-26 23:59:19 phaller Exp $ */
    22
    33/*
     
    99 * 1998/08/25 Vince Vielhaber
    1010 *
    11  * @(#) wsock32.c                        1.0.0   1998/08/25 VV initial release
     11 * @(#) wsock32.c       1.0.0   1998/08/25 VV initial release
    1212 *                      1.0.1   1999/04/27 VV cleanup and implement select.
    1313 *
    1414 */
    1515
     16
     17/* TODO
     18   - correct return codes for all API calls
     19   - correctly translate return codes to WSock style
     20*/
    1621
    1722/*****************************************************************************
     
    134139 *****************************************************************************/
    135140
    136 void SetErrForDatabaseCalls(void)
    137 {
    138   switch(h_errno)
     141#define CASEERR2(a) case SOC##a: case a: return WSA##a;
     142#define CASEERR1(a) case SOC##a: return WSA##a;
     143
     144int iTranslateSockErrToWSock(int iError)
     145{
     146  switch(iError)
    139147  {
    140     case 1:
    141       OS2WSASetLastError(11001); // host not found
    142       break;
    143     case 2:
    144       OS2WSASetLastError(11002); // try again later
    145       break;
    146     case 3:
    147       OS2WSASetLastError(11003); // No recovery
    148       break;
    149     case 4:
    150       OS2WSASetLastError(11004); // No address or no data
    151       break;
     148    CASEERR2(EINTR)
     149    CASEERR2(EBADF)
     150    CASEERR2(EACCES)
     151    CASEERR2(EINVAL)
     152    CASEERR2(EMFILE)
     153
     154    CASEERR1(EWOULDBLOCK)
     155    CASEERR1(EINPROGRESS)
     156    CASEERR1(EALREADY)
     157    CASEERR1(ENOTSOCK)
     158//  CASEERR1(EDESTADRREQ)
     159    CASEERR1(EMSGSIZE)
     160    CASEERR1(EPROTOTYPE)
     161    CASEERR1(ENOPROTOOPT)
     162    CASEERR1(EPROTONOSUPPORT)
     163    CASEERR1(ESOCKTNOSUPPORT)
     164    CASEERR1(EOPNOTSUPP)
     165    CASEERR1(EPFNOSUPPORT)
     166    CASEERR1(EAFNOSUPPORT)
     167    CASEERR1(EADDRINUSE)
     168    CASEERR1(EADDRNOTAVAIL)
     169    CASEERR1(ENETDOWN)
     170    CASEERR1(ENETUNREACH)
     171    CASEERR1(ENETRESET)
     172    CASEERR1(ECONNABORTED)
     173    CASEERR1(ECONNRESET)
     174    CASEERR1(ENOBUFS)
     175    CASEERR1(EISCONN)
     176    CASEERR1(ENOTCONN)
     177    CASEERR1(ESHUTDOWN)
     178    CASEERR1(ETOOMANYREFS)
     179    CASEERR1(ETIMEDOUT)
     180    CASEERR1(ECONNREFUSED)
     181    CASEERR1(ELOOP)
     182    CASEERR1(ENAMETOOLONG)
     183    CASEERR1(EHOSTDOWN)
     184    CASEERR1(EHOSTUNREACH)
     185
     186    CASEERR1(ENOTEMPTY)
     187//    CASEERR(EPROCLIM)
     188//    CASEERR(EUSERS)
     189//    CASEERR(EDQUOT)
     190//    CASEERR(ESTALE)
     191//    CASEERR(EREMOTE)
     192//    CASEERR(EDISCON)
     193
     194
    152195    default:
    153       OS2WSASetLastError(0); // unknown error and should never get here
    154196      dprintf(("WSOCK32: Unknown error condition: %d\n",
    155                h_errno));
    156       break;
     197               iError));
     198      return iError;
    157199  }
    158200}
     
    200242                               int*,      addrlen)
    201243{
    202   return accept(s,addr,addrlen);
     244  SOCKET rc = accept(s,addr,addrlen);
     245
     246  if (rc == INVALID_SOCKET)
     247     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     248
     249  return rc;
    203250}
    204251
     
    220267                          int,             namelen)
    221268{
    222   return bind(s,(PSOCKADDR)addr,namelen);
     269  int rc = bind(s,(PSOCKADDR)addr,namelen);
     270
     271  if (rc < 0)
     272     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     273
     274  return rc;
    223275}
    224276
     
    238290ODINFUNCTION1(int,OS2closesocket,SOCKET,s)
    239291{
    240   return soclose((int)s);
     292  int rc = soclose((int)s);
     293
     294  if (rc < 0)
     295     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     296
     297  return rc;
    241298}
    242299
     
    258315                             int,             namelen)
    259316{
    260   return connect(s,
    261                  (PSOCKADDR)name,
    262                  namelen);
     317  int rc = connect(s,
     318                   (PSOCKADDR)name,
     319                   namelen);
     320
     321  if (rc < 0)
     322     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     323
     324  return rc;
    263325}
    264326
     
    280342                                 u_long*, argp)
    281343{
    282   return ioctl(s, cmd, (char *)argp, 4);
     344  int rc = ioctl(s, cmd, (char *)argp, 4);
     345
     346  if (rc < 0)
     347     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     348
     349  return rc;
    283350}
    284351
     
    300367                                 int*,     namelen)
    301368{
    302   return getpeername(s,name,namelen);
     369  SOCKET rc = getpeername(s,name,namelen);
     370
     371  if (rc == SOCKET_ERROR)
     372     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     373
     374  return rc;
    303375}
    304376
     
    320392                                 int*,     namelen)
    321393{
    322   return getsockname(s,name,namelen);
     394  SOCKET rc = getsockname(s,name,namelen);
     395
     396  if (rc == SOCKET_ERROR)
     397     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     398
     399  return rc;
    323400}
    324401
     
    342419                                int*,  optlen)
    343420{
    344   return getsockopt(s,level,optname,optval,optlen);
     421  int rc = getsockopt(s,level,optname,optval,optlen);
     422
     423  if (rc == SOCKET_ERROR)
     424     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     425
     426  return rc;
    345427}
    346428
     
    433515                            int,   backlog)
    434516{
    435   return listen(s,backlog);
     517  int rc = listen(s,backlog);
     518
     519  if (rc < 0)
     520     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     521
     522  return rc;
    436523}
    437524
     
    490577                          int,   flags)
    491578{
    492   return recv(s,buf,len,flags);
     579  int rc = recv(s,buf,len,flags);
     580
     581  if (rc < 0)
     582     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     583
     584  return rc;
    493585}
    494586
     
    513605                              int*,      fromlen)
    514606{
    515   return recvfrom(s,buf,len,flags,from,fromlen);
     607  int rc = recvfrom(s,buf,len,flags,from,fromlen);
     608
     609  if (rc < 0)
     610     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     611
     612  return rc;
    516613}
    517614
     
    537634                            const struct Wtimeval*, timeout)
    538635{
    539   return select(nfds,
     636  int rc = select(nfds,
    540637                (fd_set *)readfds,
    541638                (fd_set *)writefds,
    542639                (fd_set *)exceptfds,
    543640                (timeval *)timeout);
     641
     642  if (rc == SOCKET_ERROR)
     643     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     644
     645  return rc;
    544646}
    545647
     
    566668                          int,         flags)
    567669{
    568   return send(s,(char *)buf,len,flags);
     670  int rc = send(s,(char *)buf,len,flags);
     671
     672  if (rc < 0)
     673     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     674
     675  return rc;
    569676}
    570677
     
    589696                            int,             tolen)
    590697{
    591   return sendto(s,(char *)buf,len,flags,(PSOCKADDR)to,tolen);
     698  int rc = sendto(s,(char *)buf,len,flags,(PSOCKADDR)to,tolen);
     699
     700  if (rc < 0)
     701     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     702
     703  return rc;
    592704}
    593705
     
    613725  struct Wlinger *yy;
    614726  struct linger xx;
     727  int    rc;
    615728
    616729  if(level   == SOL_SOCKET &&
     
    621734    xx.l_linger = (int)yy->l_linger;
    622735
    623     return setsockopt(s,level,optname,(char *)&xx,optlen);
     736    rc = setsockopt(s,level,optname,(char *)&xx,optlen);
    624737  }
    625738  else
    626     return setsockopt(s,level,optname,(char *)optval,optlen);
     739    rc = setsockopt(s,level,optname,(char *)optval,optlen);
     740
     741  if (rc == SOCKET_ERROR)
     742     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     743
     744  return rc;
    627745}
    628746
     
    643761                              int,   how)
    644762{
    645   return shutdown(s,how);
     763  int rc = shutdown(s,how);
     764
     765  if (rc == SOCKET_ERROR)
     766     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     767
     768  return rc;
    646769}
    647770
     
    663786                               int,protocol)
    664787{
    665   return (SOCKET)socket(af,type,protocol);
     788  SOCKET rc = socket(af,type,protocol);
     789
     790  if (rc == INVALID_SOCKET)
     791     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
     792
     793  return rc;
    666794}
    667795
     
    690818  if(xx == NULL)
    691819  {
    692      SetErrForDatabaseCalls();
     820     OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    693821     return (WHOSTENT *)NULL;
    694822  }
     
    724852  if(xx == NULL)
    725853  {
    726     SetErrForDatabaseCalls();
     854    OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    727855    return (WHOSTENT *)NULL;
    728856  }
     
    778906  if(xx == NULL)
    779907  { // this call doesn't generate an error message
     908    OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    780909    return (WSERVENT *)NULL;
    781910  }
     
    812941  if(xx == NULL)
    813942  { // this call doesn't generate an error message
     943    OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    814944    return (WSERVENT *)NULL;
    815945  }
     
    845975  {
    846976     // this call doesn't generate an error message
     977    OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    847978    return (WPROTOENT *)NULL;
    848979  }
     
    8761007  if(xx == NULL)
    8771008  { // this call doesn't generate an error message
     1009    OS2WSASetLastError(iTranslateSockErrToWSock(sock_errno()));
    8781010    return (WPROTOENT *)NULL;
    8791011  }
     
    9331065  }
    9341066  else
    935     ii = sock_errno();
     1067    ii = iTranslateSockErrToWSock(sock_errno());
    9361068
    9371069  return ii;
Note: See TracChangeset for help on using the changeset viewer.