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 |
|
|
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; |
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); |
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; |
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 |
{ |
{ |
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 |
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; |
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 |
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 |
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; |
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; |
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)); |
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)); |
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); |
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); |
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), |