Ignore:
Timestamp:
Oct 11, 2001, 9:24:07 PM (24 years ago)
Author:
sandervl
Message:

get/setsockopt updates

File:
1 edited

Legend:

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

    r6996 r7022  
    1 /* $Id: wsock32.cpp,v 1.40 2001-10-10 20:59:23 phaller Exp $ */
     1/* $Id: wsock32.cpp,v 1.41 2001-10-11 19:24:07 sandervl Exp $ */
    22
    33/*
     
    750750        return SOCKET_ERROR;
    751751   }
     752//testestest
     753#ifdef DEBUG
     754   dprintf(("sending to %s", inet_ntoa(((sockaddr_in*)to)->sin_addr)));
     755   for(int i=0;i<len;i++) {
     756       dprintf(("%02x: %x", i, buf[i]));
     757   }
     758#endif
    752759   ret = sendto(s, (char *)buf, len, flags, (struct sockaddr *)to, tolen);
    753760
     
    10211028               }
    10221029               //TODO convert common interface names!
    1023                ret = setsockopt(s, level, optname, (char *)optval, optlen);
     1030               ret = setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF_OS2, (char *)optval, optlen);
    10241031               break;
    10251032           }
    10261033
    10271034           case IP_ADD_MEMBERSHIP:
     1035           case WS2_IPPROTO_OPT(IP_ADD_MEMBERSHIP_WS2):
     1036               if (optlen < sizeof(struct ip_mreq))
     1037               {
     1038                   dprintf(("IPPROTO_IP, IP_ADD_MEMBERSHIP, optlen too small"));
     1039                   WSASetLastError(WSAEFAULT);
     1040                   return SOCKET_ERROR;
     1041               }
     1042               ret = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP_OS2, (char *)optval, optlen);
     1043               break;
     1044
    10281045           case IP_DROP_MEMBERSHIP:
    1029            case WS2_IPPROTO_OPT(IP_ADD_MEMBERSHIP_WS2):
    10301046           case WS2_IPPROTO_OPT(IP_DROP_MEMBERSHIP_WS2):
    10311047               if (optlen < sizeof(struct ip_mreq))
    10321048               {
    1033                    dprintf(("IPPROTO_IP, IP_ADD_MEMBERSHIP/IP_DROP_MEMBERSHIP, optlen too small"));
     1049                   dprintf(("IPPROTO_IP, IP_DROP_MEMBERSHIP, optlen too small"));
    10341050                   WSASetLastError(WSAEFAULT);
    10351051                   return SOCKET_ERROR;
    10361052               }
    1037                ret = setsockopt(s, level, optname, (char *)optval, optlen);
     1053               ret = setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP_OS2, (char *)optval, optlen);
    10381054               break;
    10391055
     
    10491065               }
    10501066               flLoop = (*optval == 0) ? 0 : 1;
    1051                dprintf(("IP_MULTICAST_LOOP/IP_MULTICAST_TTL %d", *optval));
    1052                ret = setsockopt(s, level, optname, (char *)&flLoop, optlen);
     1067               dprintf(("IP_MULTICAST_LOOP %d", *optval));
     1068               ret = setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP_OS2, (char *)&flLoop, optlen);
    10531069               break;
    10541070           }
     
    10621078                   return SOCKET_ERROR;
    10631079               }
    1064                ret = setsockopt(s, level, optname, (char *)optval, optlen);
     1080               ret = setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL_OS2, (char *)optval, optlen);
     1081               break;
     1082
     1083           case IP_TTL:
     1084           case WS2_IPPROTO_OPT(IP_TTL_WS2):
     1085               if (optlen < sizeof(u_int))
     1086               {
     1087                   dprintf(("IPPROTO_IP, IP_TTL_WS2, optlen too small"));
     1088                   WSASetLastError(WSAEFAULT);
     1089                   return SOCKET_ERROR;
     1090               }
     1091               dprintf(("IPPROTO_IP, IP_TTL 0x%x", *optval));
     1092               ret = setsockopt(s, IPPROTO_IP, IP_TTL_OS2, (char *)optval, optlen);
     1093               break;
     1094
     1095           case IP_TOS:
     1096           case WS2_IPPROTO_OPT(IP_TOS_WS2):
     1097               if (optlen < sizeof(u_int))
     1098               {
     1099                   dprintf(("IPPROTO_IP, IP_TOS_WS2, optlen too small"));
     1100                   WSASetLastError(WSAEFAULT);
     1101                   return SOCKET_ERROR;
     1102               }
     1103               dprintf(("IPPROTO_IP, IP_TOS 0x%x", *optval));
     1104               ret = setsockopt(s, IPPROTO_IP, IP_TOS_OS2, (char *)optval, optlen);
     1105               break;
     1106
     1107           case WS2_IPPROTO_OPT(IP_HDRINCL_WS2):
     1108               if (optlen < sizeof(u_int))
     1109               {
     1110                   dprintf(("IPPROTO_IP, IP_HDRINCL_WS2, optlen too small"));
     1111                   WSASetLastError(WSAEFAULT);
     1112                   return SOCKET_ERROR;
     1113               }
     1114               dprintf(("IPPROTO_IP, IP_HDRINCL 0x%x", *optval));
     1115               ret = setsockopt(s, IPPROTO_IP, IP_HDRINCL_OS2, (char *)optval, optlen);
    10651116               break;
    10661117
     
    11701221        }
    11711222   }
     1223   else
     1224   if(level == IPPROTO_IP) {
     1225       switch (optname)
     1226       {
     1227           case IP_MULTICAST_IF:
     1228           case WS2_IPPROTO_OPT(IP_MULTICAST_IF_WS2):
     1229           {
     1230               if (*optlen < sizeof(in_addr))
     1231               {
     1232                   dprintf(("IPPROTO_IP, IP_MULTICAST_IP, optlen too small"));
     1233                   WSASetLastError(WSAEFAULT);
     1234                   return SOCKET_ERROR;
     1235               }
     1236               //TODO convert common interface names!
     1237               ret = getsockopt(s, IPPROTO_IP, IP_MULTICAST_IF_OS2, (char *)optval, optlen);
     1238               break;
     1239           }
     1240
     1241           case IP_ADD_MEMBERSHIP:
     1242           case WS2_IPPROTO_OPT(IP_ADD_MEMBERSHIP_WS2):
     1243               if (*optlen < sizeof(struct ip_mreq))
     1244               {
     1245                   dprintf(("IPPROTO_IP, IP_ADD_MEMBERSHIP, optlen too small"));
     1246                   WSASetLastError(WSAEFAULT);
     1247                   return SOCKET_ERROR;
     1248               }
     1249               ret = getsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP_OS2, (char *)optval, optlen);
     1250               break;
     1251
     1252           case IP_DROP_MEMBERSHIP:
     1253           case WS2_IPPROTO_OPT(IP_DROP_MEMBERSHIP_WS2):
     1254               if (*optlen < sizeof(struct ip_mreq))
     1255               {
     1256                   dprintf(("IPPROTO_IP, IP_DROP_MEMBERSHIP, optlen too small"));
     1257                   WSASetLastError(WSAEFAULT);
     1258                   return SOCKET_ERROR;
     1259               }
     1260               ret = getsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP_OS2, (char *)optval, optlen);
     1261               break;
     1262
     1263           case IP_MULTICAST_LOOP:
     1264           case WS2_IPPROTO_OPT(IP_MULTICAST_LOOP_WS2):
     1265           {
     1266               if (*optlen < sizeof(u_char))
     1267               {
     1268                   dprintf(("IPPROTO_IP, IP_MULTICAST_LOOP/IP_MULTICAST_TTL, optlen too small"));
     1269                   WSASetLastError(WSAEFAULT);
     1270                   return SOCKET_ERROR;
     1271               }
     1272               ret = getsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP_OS2, (char *)optval, optlen);
     1273               break;
     1274           }
     1275
     1276           case IP_MULTICAST_TTL:
     1277           case WS2_IPPROTO_OPT(IP_MULTICAST_TTL_WS2):
     1278               if (*optlen < sizeof(u_char))
     1279               {
     1280                   dprintf(("IPPROTO_IP, IP_MULTICAST_TTL, optlen too small"));
     1281                   WSASetLastError(WSAEFAULT);
     1282                   return SOCKET_ERROR;
     1283               }
     1284               ret = getsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL_OS2, (char *)optval, optlen);
     1285               break;
     1286
     1287           case IP_TTL:
     1288           case WS2_IPPROTO_OPT(IP_TTL_WS2):
     1289               if (*optlen < sizeof(u_int))
     1290               {
     1291                   dprintf(("IPPROTO_IP, IP_TTL_WS2, optlen too small"));
     1292                   WSASetLastError(WSAEFAULT);
     1293                   return SOCKET_ERROR;
     1294               }
     1295               ret = getsockopt(s, IPPROTO_IP, IP_TTL_OS2, (char *)optval, optlen);
     1296               break;
     1297
     1298           case IP_TOS:
     1299           case WS2_IPPROTO_OPT(IP_TOS_WS2):
     1300               if (*optlen < sizeof(u_int))
     1301               {
     1302                   dprintf(("IPPROTO_IP, IP_TOS_WS2, optlen too small"));
     1303                   WSASetLastError(WSAEFAULT);
     1304                   return SOCKET_ERROR;
     1305               }
     1306               ret = getsockopt(s, IPPROTO_IP, IP_TOS_OS2, (char *)optval, optlen);
     1307               break;
     1308
     1309           case WS2_IPPROTO_OPT(IP_HDRINCL_WS2):
     1310               if (*optlen < sizeof(u_int))
     1311               {
     1312                   dprintf(("IPPROTO_IP, IP_HDRINCL_WS2, optlen too small"));
     1313                   WSASetLastError(WSAEFAULT);
     1314                   return SOCKET_ERROR;
     1315               }
     1316               ret = getsockopt(s, IPPROTO_IP, IP_HDRINCL_OS2, (char *)optval, optlen);
     1317               break;
     1318
     1319           default:
     1320                dprintf(("getsockopt: IPPROTO_IP, unknown option %x", optname));
     1321                WSASetLastError(WSAENOPROTOOPT);
     1322                return SOCKET_ERROR;
     1323       }
     1324   }
    11721325   else {
    11731326        WSASetLastError(WSAEINVAL);
Note: See TracChangeset for help on using the changeset viewer.