/[guile]/guile/guile-core/libguile/socket.c
ViewVC logotype

Diff of /guile/guile-core/libguile/socket.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.88 by mvo, Wed Jul 10 19:40:43 2002 UTC revision 1.89 by xxhanwen, Sat Jul 20 14:08:34 2002 UTC
# Line 473  SCM_DEFINE (scm_socketpair, "socketpair" Line 473  SCM_DEFINE (scm_socketpair, "socketpair"
473    int fam;    int fam;
474    int fd[2];    int fd[2];
475    
476    SCM_VALIDATE_INUM (1,family);    SCM_VALIDATE_INUM (1, family);
477    SCM_VALIDATE_INUM (2,style);    SCM_VALIDATE_INUM (2, style);
478    SCM_VALIDATE_INUM (3,proto);    SCM_VALIDATE_INUM (3, proto);
479    
480    fam = SCM_INUM (family);    fam = SCM_INUM (family);
481    
# Line 673  SCM_DEFINE (scm_shutdown, "shutdown", 2, Line 673  SCM_DEFINE (scm_shutdown, "shutdown", 2,
673  {  {
674    int fd;    int fd;
675    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
676    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
677    SCM_VALIDATE_INUM (2,how);    SCM_VALIDATE_INUM (2, how);
678    SCM_ASSERT_RANGE(2,how,0 <= SCM_INUM (how) && 2 >= SCM_INUM (how));    SCM_ASSERT_RANGE(2, how,0 <= SCM_INUM (how) && 2 >= SCM_INUM (how));
679    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
680    if (shutdown (fd, SCM_INUM (how)) == -1)    if (shutdown (fd, SCM_INUM (how)) == -1)
681      SCM_SYSERROR;      SCM_SYSERROR;
# Line 820  SCM_DEFINE (scm_connect, "connect", 3, 0 Line 820  SCM_DEFINE (scm_connect, "connect", 3, 0
820    int size;    int size;
821    
822    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
823    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
824    SCM_VALIDATE_INUM (2,fam);    SCM_VALIDATE_INUM (2, fam);
825    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
826    soka = scm_fill_sockaddr (SCM_INUM (fam), address, &args, 3, FUNC_NAME,    soka = scm_fill_sockaddr (SCM_INUM (fam), address, &args, 3, FUNC_NAME,
827                              &size);                              &size);
# Line 911  SCM_DEFINE (scm_listen, "listen", 2, 0, Line 911  SCM_DEFINE (scm_listen, "listen", 2, 0,
911  {  {
912    int fd;    int fd;
913    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
914    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
915    SCM_VALIDATE_INUM (2,backlog);    SCM_VALIDATE_INUM (2, backlog);
916    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
917    if (listen (fd, SCM_INUM (backlog)) == -1)    if (listen (fd, SCM_INUM (backlog)) == -1)
918      SCM_SYSERROR;      SCM_SYSERROR;
# Line 925  static SCM Line 925  static SCM
925  scm_addr_vector (const struct sockaddr *address, const char *proc)  scm_addr_vector (const struct sockaddr *address, const char *proc)
926  {  {
927    short int fam = address->sa_family;    short int fam = address->sa_family;
928    SCM result;    SCM ans =SCM_EOL;
929    SCM *ve;  
930    
931    switch (fam)    switch (fam)
932      {      {
# Line 934  scm_addr_vector (const struct sockaddr * Line 934  scm_addr_vector (const struct sockaddr *
934        {        {
935          const struct sockaddr_in *nad = (struct sockaddr_in *) address;          const struct sockaddr_in *nad = (struct sockaddr_in *) address;
936    
937          result = scm_c_make_vector (3, SCM_UNSPECIFIED);          ans = scm_c_make_vector (3, SCM_UNSPECIFIED);
938          ve = SCM_VELTS (result);  
939          ve[0] = scm_ulong2num ((unsigned long) fam);          SCM_VECTOR_SET(ans, 0, scm_ulong2num ((unsigned long) fam));
940          ve[1] = scm_ulong2num (ntohl (nad->sin_addr.s_addr));          SCM_VECTOR_SET(ans, 1, scm_ulong2num (ntohl (nad->sin_addr.s_addr)));
941          ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin_port));          SCM_VECTOR_SET(ans, 2, scm_ulong2num ((unsigned long) ntohs (nad->sin_port)));
942        }        }
943        break;        break;
944  #ifdef HAVE_IPV6  #ifdef HAVE_IPV6
# Line 946  scm_addr_vector (const struct sockaddr * Line 946  scm_addr_vector (const struct sockaddr *
946        {        {
947          const struct sockaddr_in6 *nad = (struct sockaddr_in6 *) address;          const struct sockaddr_in6 *nad = (struct sockaddr_in6 *) address;
948    
949          result = scm_c_make_vector (5, SCM_UNSPECIFIED);          ans = scm_c_make_vector (5, SCM_UNSPECIFIED);
950          ve = SCM_VELTS (result);          SCM_VECTOR_SET(ans, 0, scm_ulong2num ((unsigned long) fam));
951          ve[0] = scm_ulong2num ((unsigned long) fam);          SCM_VECTOR_SET(ans, 1, ipv6_net_to_num (nad->sin6_addr.s6_addr));
952          ve[1] = ipv6_net_to_num (nad->sin6_addr.s6_addr);          SCM_VECTOR_SET(ans, 2, scm_ulong2num ((unsigned long) ntohs (nad->sin6_port)));
953          ve[2] = scm_ulong2num ((unsigned long) ntohs (nad->sin6_port));          SCM_VECTOR_SET(ans, 3, scm_ulong2num ((unsigned long) nad->sin6_flowinfo));
         ve[3] = scm_ulong2num ((unsigned long) nad->sin6_flowinfo);  
954  #ifdef HAVE_SIN6_SCOPE_ID  #ifdef HAVE_SIN6_SCOPE_ID
955          ve[4] = scm_ulong2num ((unsigned long) nad->sin6_scope_id);          SCM_VECTOR_SET(ans, 4, scm_ulong2num ((unsigned long) nad->sin6_scope_id));
956  #else  #else
957          ve[4] = SCM_INUM0;          SCM_VECTOR_SET(ans, 4, SCM_INUM0);
958  #endif  #endif
959        }        }
960        break;        break;
# Line 965  scm_addr_vector (const struct sockaddr * Line 964  scm_addr_vector (const struct sockaddr *
964        {        {
965          const struct sockaddr_un *nad = (struct sockaddr_un *) address;          const struct sockaddr_un *nad = (struct sockaddr_un *) address;
966    
967          result = scm_c_make_vector (2, SCM_UNSPECIFIED);          ans = scm_c_make_vector (2, SCM_UNSPECIFIED);
968          ve = SCM_VELTS (result);  
969          ve[0] = scm_ulong2num ((unsigned long) fam);          SCM_VECTOR_SET(ans, 0, scm_ulong2num ((unsigned long) fam));
970          ve[1] = scm_mem2string (nad->sun_path, strlen (nad->sun_path));          SCM_VECTOR_SET(ans, 1, scm_mem2string (nad->sun_path, strlen (nad->sun_path)));
971        }        }
972        break;        break;
973  #endif  #endif
# Line 976  scm_addr_vector (const struct sockaddr * Line 975  scm_addr_vector (const struct sockaddr *
975        scm_misc_error (proc, "Unrecognised address family: ~A",        scm_misc_error (proc, "Unrecognised address family: ~A",
976                        scm_list_1 (SCM_MAKINUM (fam)));                        scm_list_1 (SCM_MAKINUM (fam)));
977      }      }
978    return result;    return ans;
979  }  }
980    
981  /* calculate the size of a buffer large enough to hold any supported  /* calculate the size of a buffer large enough to hold any supported
# Line 1047  SCM_DEFINE (scm_getsockname, "getsocknam Line 1046  SCM_DEFINE (scm_getsockname, "getsocknam
1046    struct sockaddr *addr = (struct sockaddr *) max_addr;    struct sockaddr *addr = (struct sockaddr *) max_addr;
1047    
1048    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
1049    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
1050    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1051    if (getsockname (fd, addr, &addr_size) == -1)    if (getsockname (fd, addr, &addr_size) == -1)
1052      SCM_SYSERROR;      SCM_SYSERROR;
# Line 1069  SCM_DEFINE (scm_getpeername, "getpeernam Line 1068  SCM_DEFINE (scm_getpeername, "getpeernam
1068    struct sockaddr *addr = (struct sockaddr *) max_addr;    struct sockaddr *addr = (struct sockaddr *) max_addr;
1069    
1070    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
1071    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
1072    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1073    if (getpeername (fd, addr, &addr_size) == -1)    if (getpeername (fd, addr, &addr_size) == -1)
1074      SCM_SYSERROR;      SCM_SYSERROR;
# Line 1102  SCM_DEFINE (scm_recv, "recv!", 2, 1, 0, Line 1101  SCM_DEFINE (scm_recv, "recv!", 2, 1, 0,
1101    int fd;    int fd;
1102    int flg;    int flg;
1103    
1104    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
1105    SCM_VALIDATE_STRING (2,buf);    SCM_VALIDATE_STRING (2, buf);
1106    SCM_VALIDATE_INUM_DEF_COPY (3,flags,0,flg);    SCM_VALIDATE_INUM_DEF_COPY (3, flags,0, flg);
1107    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1108    
1109    SCM_SYSCALL (rv = recv (fd, SCM_STRING_CHARS (buf), SCM_STRING_LENGTH (buf), flg));    SCM_SYSCALL (rv = recv (fd, SCM_STRING_CHARS (buf), SCM_STRING_LENGTH (buf), flg));
# Line 1136  SCM_DEFINE (scm_send, "send", 2, 1, 0, Line 1135  SCM_DEFINE (scm_send, "send", 2, 1, 0,
1135    int flg;    int flg;
1136    
1137    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
1138    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
1139    SCM_VALIDATE_STRING (2, message);    SCM_VALIDATE_STRING (2, message);
1140    SCM_VALIDATE_INUM_DEF_COPY (3,flags,0,flg);    SCM_VALIDATE_INUM_DEF_COPY (3, flags,0, flg);
1141    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1142    
1143    SCM_SYSCALL (rv = send (fd, SCM_STRING_CHARS (message), SCM_STRING_LENGTH (message), flg));    SCM_SYSCALL (rv = send (fd, SCM_STRING_CHARS (message), SCM_STRING_LENGTH (message), flg));
# Line 1182  SCM_DEFINE (scm_recvfrom, "recvfrom!", 2 Line 1181  SCM_DEFINE (scm_recvfrom, "recvfrom!", 2
1181    char max_addr[MAX_ADDR_SIZE];    char max_addr[MAX_ADDR_SIZE];
1182    struct sockaddr *addr = (struct sockaddr *) max_addr;    struct sockaddr *addr = (struct sockaddr *) max_addr;
1183    
1184    SCM_VALIDATE_OPFPORT (1,sock);    SCM_VALIDATE_OPFPORT (1, sock);
1185    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1186    SCM_VALIDATE_SUBSTRING_SPEC_COPY (2, str, buf, 4, start, offset,    SCM_VALIDATE_SUBSTRING_SPEC_COPY (2, str, buf, 4, start, offset,
1187                                      5, end, cend);                                      5, end, cend);
# Line 1236  SCM_DEFINE (scm_sendto, "sendto", 4, 0, Line 1235  SCM_DEFINE (scm_sendto, "sendto", 4, 0,
1235    int size;    int size;
1236    
1237    sock = SCM_COERCE_OUTPORT (sock);    sock = SCM_COERCE_OUTPORT (sock);
1238    SCM_VALIDATE_FPORT (1,sock);    SCM_VALIDATE_FPORT (1, sock);
1239    SCM_VALIDATE_STRING (2, message);    SCM_VALIDATE_STRING (2, message);
1240    SCM_VALIDATE_INUM (3,fam);    SCM_VALIDATE_INUM (3, fam);
1241    fd = SCM_FPORT_FDES (sock);    fd = SCM_FPORT_FDES (sock);
1242    soka = scm_fill_sockaddr (SCM_INUM (fam), address, &args_and_flags, 4,    soka = scm_fill_sockaddr (SCM_INUM (fam), address, &args_and_flags, 4,
1243                              FUNC_NAME, &size);                              FUNC_NAME, &size);
# Line 1246  SCM_DEFINE (scm_sendto, "sendto", 4, 0, Line 1245  SCM_DEFINE (scm_sendto, "sendto", 4, 0,
1245      flg = 0;      flg = 0;
1246    else    else
1247      {      {
1248        SCM_VALIDATE_CONS (5,args_and_flags);        SCM_VALIDATE_CONS (5, args_and_flags);
1249        flg = SCM_NUM2ULONG (5, SCM_CAR (args_and_flags));        flg = SCM_NUM2ULONG (5, SCM_CAR (args_and_flags));
1250      }      }
1251    SCM_SYSCALL (rv = sendto (fd, SCM_STRING_CHARS (message),    SCM_SYSCALL (rv = sendto (fd, SCM_STRING_CHARS (message),

Legend:
Removed from v.1.88  
changed lines
  Added in v.1.89

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26