static int cmpforsearch(void *av, void *bv)
{
Actual_Socket b = (Actual_Socket) bv;
- int as = (int) av, bs = b->s;
+ int as = *(int *)av, bs = b->s;
if (as < bs)
return -1;
if (as > bs)
sk_tcp_socket_error
};
-Socket sk_register(void *sock, Plug plug)
+Socket sk_register(OSSocket sockfd, Plug plug)
{
Actual_Socket ret;
ret->oobpending = FALSE;
ret->listener = 0;
- ret->s = (int)sock;
+ ret->s = sockfd;
if (ret->s < 0) {
ret->error = error_string(errno);
else
localport = 0; /* just use port 0 (ie kernel picks) */
+ /* BSD IP stacks need sockaddr_in zeroed before filling in */
+ memset(&a,'\0',sizeof(struct sockaddr_in));
+#ifdef IPV6
+ memset(&a6,'\0',sizeof(struct sockaddr_in6));
+#endif
/* Loop round trying to bind */
while (1) {
int retcode;
uxsel_tell(ret);
add234(sktree, ret);
+ sk_addr_free(addr);
+
return (Socket) ret;
}
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));
+ /* BSD IP stacks need sockaddr_in zeroed before filling in */
+ memset(&a,'\0',sizeof(struct sockaddr_in));
#ifdef IPV6
+#if 0
+ memset(&a6,'\0',sizeof(struct sockaddr_in6));
+#endif
hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = 0;
u_long atmark;
/* Find the Socket structure */
- s = find234(sktree, (void *) fd, cmpforsearch);
+ s = find234(sktree, &fd, cmpforsearch);
if (!s)
return 1; /* boggle */
memset(&isa, 0, sizeof(struct sockaddr_in));
err = 0;
- t = accept(s->s,(struct sockaddr *)&isa,&addrlen);
+ t = accept(s->s,(struct sockaddr *)&isa,(socklen_t *) &addrlen);
if (t < 0) {
break;
}
if (s->localhost_only && !ipv4_is_loopback(isa.sin_addr)) {
close(t); /* someone let nonlocal through?! */
- } else if (plug_accepting(s->plug, (void*)t)) {
+ } else if (plug_accepting(s->plug, t)) {
close(t); /* denied or error */
}
break;