Changeset 1344


Ignore:
Timestamp:
Apr 7, 2004, 1:25:56 AM (21 years ago)
Author:
bird
Message:

#732: SOL_SOCKET+SO_ERROR needed error number wrapping.

Location:
branches/GCC_3-2-2_BETA4_BRANCH/src/emx/src/libsocket
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/GCC_3-2-2_BETA4_BRANCH/src/emx/src/libsocket/getsockopt.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.2.2.1
    r1343 r1344  
    4646        rc = __libsocket_getsockopt(pFHSocket->iSocket, level, optname, optval, optlen);
    4747        if (rc >= 0)
     48        {
     49            switch (level)
     50            {
     51                case SOL_SOCKET:
     52                    switch (optname)
     53                    {
     54                        case SO_ERROR:
     55                        {
     56                            int err = *(int*)optval;
     57                            if (err >= EOS2_TCPIP_OFFSET && err < EOS2_TCPIP_OFFSET + 1000)
     58                            {
     59                                err -= EOS2_TCPIP_OFFSET;
     60                                *(int*)optval = err;
     61                            }
     62                            LIBCLOG_MSG("err: %d\n", err);
     63                            break;
     64                        }
     65                    }
     66                    break;
     67            }
    4868            LIBCLOG_RETURN_INT(rc);
     69        }
    4970        __libsocket_setLibcErrno();
    5071    }
  • branches/GCC_3-2-2_BETA4_BRANCH/src/emx/src/libsocket/setsockopt.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.2.2.1
    r1343 r1344  
    3838int setsockopt(int socket, int level, int optname, const void *optval, int optlen)
    3939{
    40     LIBCLOG_ENTER("socket=%d level=%#x optname=%#x optval=%p optlen=%p\n",
     40    LIBCLOG_ENTER("socket=%d level=%#x optname=%#x optval=%p optlen=%d\n",
    4141                  socket, level, optname, optval, optlen);
    4242    PLIBCSOCKETFH   pFHSocket = __libsocket_FH(socket);
     
    4444    {
    4545        int rc;
    46         rc = __libsocket_setsockopt(pFHSocket->iSocket, level, optname, optval, optlen);
     46        if (    level == SOL_SOCKET
     47            &&  optname == SO_ERROR
     48            &&  optlen == 4
     49            &&  optval)
     50        {
     51            int err = *(int*)optval;
     52            if (err > 0 && err <= 1000)
     53                err += EOS2_TCPIP_OFFSET;
     54            LIBCLOG_MSG("err: %d\n", err);
     55            rc = __libsocket_setsockopt(pFHSocket->iSocket, SOL_SOCKET, SO_ERROR, &err, 4);
     56        }
     57        else
     58            rc = __libsocket_setsockopt(pFHSocket->iSocket, level, optname, optval, optlen);
    4759        if (rc >= 0)
    4860            LIBCLOG_RETURN_INT(rc);
Note: See TracChangeset for help on using the changeset viewer.