* ext/socket/init.c (struct recvfrom_arg): use struct

sockaddr_storage.
  (recvfrom_blocking): follow struct recvfrom_arg change.
  (s_recvfrom): ditto.
  (s_recvfrom_nonblock): use struct sockaddr_storage.

* ext/socket/socket.c (sock_accept): use struct sockaddr_storage.
  (sock_accept_nonblock): ditto.
  (sock_sysaccept): ditto.

* ext/socket/ancdata.c (bsock_recvmsg_internal): use struct
  sockaddr_storage.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2009-02-10 14:46:51 +00:00
parent 6245caf58c
commit 2ee0859119
4 changed files with 36 additions and 21 deletions

View File

@ -1,3 +1,18 @@
Tue Feb 10 23:44:53 2009 Tanaka Akira <akr@fsij.org>
* ext/socket/init.c (struct recvfrom_arg): use struct
sockaddr_storage.
(recvfrom_blocking): follow struct recvfrom_arg change.
(s_recvfrom): ditto.
(s_recvfrom_nonblock): use struct sockaddr_storage.
* ext/socket/socket.c (sock_accept): use struct sockaddr_storage.
(sock_accept_nonblock): ditto.
(sock_sysaccept): ditto.
* ext/socket/ancdata.c (bsock_recvmsg_internal): use struct
sockaddr_storage.
Tue Feb 10 23:30:32 2009 Tanaka Akira <akr@fsij.org> Tue Feb 10 23:30:32 2009 Tanaka Akira <akr@fsij.org>
* ext/socket/basicsocket.c (bsock_getpeername): use struct * ext/socket/basicsocket.c (bsock_getpeername): use struct

View File

@ -952,7 +952,7 @@ bsock_recvmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock)
#if defined(HAVE_ST_MSG_CONTROL) #if defined(HAVE_ST_MSG_CONTROL)
struct cmsghdr *cmh; struct cmsghdr *cmh;
#endif #endif
char namebuf[1024]; struct sockaddr_storage namebuf;
char datbuf0[4096], *datbuf; char datbuf0[4096], *datbuf;
char ctlbuf0[4096], *ctlbuf; char ctlbuf0[4096], *ctlbuf;
VALUE dat_str = Qnil; VALUE dat_str = Qnil;
@ -1014,8 +1014,8 @@ bsock_recvmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock)
memset(&mh, 0, sizeof(mh)); memset(&mh, 0, sizeof(mh));
memset(namebuf, 0, sizeof(namebuf)); memset(&namebuf, 0, sizeof(namebuf));
mh.msg_name = namebuf; mh.msg_name = (struct sockaddr *)&namebuf;
mh.msg_namelen = sizeof(namebuf); mh.msg_namelen = sizeof(namebuf);
mh.msg_iov = &iov; mh.msg_iov = &iov;

View File

@ -78,7 +78,7 @@ struct recvfrom_arg {
int fd, flags; int fd, flags;
VALUE str; VALUE str;
socklen_t alen; socklen_t alen;
char buf[1024]; struct sockaddr_storage buf;
}; };
static VALUE static VALUE
@ -86,7 +86,7 @@ recvfrom_blocking(void *data)
{ {
struct recvfrom_arg *arg = data; struct recvfrom_arg *arg = data;
return (VALUE)recvfrom(arg->fd, RSTRING_PTR(arg->str), RSTRING_LEN(arg->str), return (VALUE)recvfrom(arg->fd, RSTRING_PTR(arg->str), RSTRING_LEN(arg->str),
arg->flags, (struct sockaddr*)arg->buf, &arg->alen); arg->flags, (struct sockaddr*)&arg->buf, &arg->alen);
} }
VALUE VALUE
@ -139,16 +139,16 @@ s_recvfrom(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
} }
#endif #endif
if (arg.alen && arg.alen != sizeof(arg.buf)) /* OSX doesn't return a from result for connection-oriented sockets */ if (arg.alen && arg.alen != sizeof(arg.buf)) /* OSX doesn't return a from result for connection-oriented sockets */
return rb_assoc_new(str, ipaddr((struct sockaddr*)arg.buf, fptr->mode & FMODE_NOREVLOOKUP)); return rb_assoc_new(str, ipaddr((struct sockaddr*)&arg.buf, fptr->mode & FMODE_NOREVLOOKUP));
else else
return rb_assoc_new(str, Qnil); return rb_assoc_new(str, Qnil);
#ifdef HAVE_SYS_UN_H #ifdef HAVE_SYS_UN_H
case RECV_UNIX: case RECV_UNIX:
return rb_assoc_new(str, unixaddr((struct sockaddr_un*)arg.buf, arg.alen)); return rb_assoc_new(str, unixaddr((struct sockaddr_un*)&arg.buf, arg.alen));
#endif #endif
case RECV_SOCKET: case RECV_SOCKET:
return rb_assoc_new(str, io_socket_addrinfo(sock, (struct sockaddr*)arg.buf, arg.alen)); return rb_assoc_new(str, io_socket_addrinfo(sock, (struct sockaddr*)&arg.buf, arg.alen));
default: default:
rb_bug("s_recvfrom called with bad value"); rb_bug("s_recvfrom called with bad value");
} }
@ -159,7 +159,7 @@ s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
{ {
rb_io_t *fptr; rb_io_t *fptr;
VALUE str; VALUE str;
char buf[1024]; struct sockaddr_storage buf;
socklen_t alen = sizeof buf; socklen_t alen = sizeof buf;
VALUE len, flg; VALUE len, flg;
long buflen; long buflen;
@ -189,7 +189,7 @@ s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
rb_io_check_closed(fptr); rb_io_check_closed(fptr);
rb_io_set_nonblock(fptr); rb_io_set_nonblock(fptr);
slen = recvfrom(fd, RSTRING_PTR(str), buflen, flags, (struct sockaddr*)buf, &alen); slen = recvfrom(fd, RSTRING_PTR(str), buflen, flags, (struct sockaddr*)&buf, &alen);
if (slen < 0) { if (slen < 0) {
rb_sys_fail("recvfrom(2)"); rb_sys_fail("recvfrom(2)");
@ -204,11 +204,11 @@ s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)
case RECV_IP: case RECV_IP:
if (alen && alen != sizeof(buf)) /* connection-oriented socket may not return a from result */ if (alen && alen != sizeof(buf)) /* connection-oriented socket may not return a from result */
addr = ipaddr((struct sockaddr*)buf, fptr->mode & FMODE_NOREVLOOKUP); addr = ipaddr((struct sockaddr*)&buf, fptr->mode & FMODE_NOREVLOOKUP);
break; break;
case RECV_SOCKET: case RECV_SOCKET:
addr = io_socket_addrinfo(sock, (struct sockaddr*)buf, alen); addr = io_socket_addrinfo(sock, (struct sockaddr*)&buf, alen);
break; break;
default: default:

View File

@ -688,13 +688,13 @@ sock_accept(VALUE sock)
{ {
rb_io_t *fptr; rb_io_t *fptr;
VALUE sock2; VALUE sock2;
char buf[1024]; struct sockaddr_storage buf;
socklen_t len = sizeof buf; socklen_t len = sizeof buf;
GetOpenFile(sock, fptr); GetOpenFile(sock, fptr);
sock2 = s_accept(rb_cSocket,fptr->fd,(struct sockaddr*)buf,&len); sock2 = s_accept(rb_cSocket,fptr->fd,(struct sockaddr*)&buf,&len);
return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)buf, len)); return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)&buf, len));
} }
/* /*
@ -750,12 +750,12 @@ sock_accept_nonblock(VALUE sock)
{ {
rb_io_t *fptr; rb_io_t *fptr;
VALUE sock2; VALUE sock2;
char buf[1024]; struct sockaddr_storage buf;
socklen_t len = sizeof buf; socklen_t len = sizeof buf;
GetOpenFile(sock, fptr); GetOpenFile(sock, fptr);
sock2 = s_accept_nonblock(rb_cSocket, fptr, (struct sockaddr *)buf, &len); sock2 = s_accept_nonblock(rb_cSocket, fptr, (struct sockaddr *)&buf, &len);
return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)buf, len)); return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)&buf, len));
} }
/* /*
@ -802,13 +802,13 @@ sock_sysaccept(VALUE sock)
{ {
rb_io_t *fptr; rb_io_t *fptr;
VALUE sock2; VALUE sock2;
char buf[1024]; struct sockaddr_storage buf;
socklen_t len = sizeof buf; socklen_t len = sizeof buf;
GetOpenFile(sock, fptr); GetOpenFile(sock, fptr);
sock2 = s_accept(0,fptr->fd,(struct sockaddr*)buf,&len); sock2 = s_accept(0,fptr->fd,(struct sockaddr*)&buf,&len);
return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)buf, len)); return rb_assoc_new(sock2, io_socket_addrinfo(sock2, (struct sockaddr*)&buf, len));
} }
#ifdef HAVE_GETHOSTNAME #ifdef HAVE_GETHOSTNAME