ping ? Le mardi 01 janvier 2013 à 19:24 +0100, Laurent Vivier a écrit : > From: Laurent Vivier <laur...@vivier.eu> > > SO_SNDTIMEO and SO_RCVTIMEO take a struct timeval, not an int > > To test this, you can use : > > QEMU_STRACE= ping localhost 2>&1 |grep TIMEO > 568 setsockopt(3,SOL_SOCKET,SO_SNDTIMEO,{1,0},8) = 0 > 568 setsockopt(3,SOL_SOCKET,SO_RCVTIMEO,{1,0},8) = 0 > > Signed-off-by: Laurent Vivier <laur...@vivier.eu> > --- > v2: pass checkpatch.pl > > linux-user/syscall.c | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index e99adab..2b2bd2b 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -1491,6 +1491,28 @@ static abi_long do_setsockopt(int sockfd, int level, > int optname, > break; > case TARGET_SOL_SOCKET: > switch (optname) { > + case TARGET_SO_RCVTIMEO: > + { > + struct timeval tv; > + > + optname = SO_RCVTIMEO; > + > +set_timeout: > + if (optlen != sizeof(struct target_timeval)) { > + return -TARGET_EINVAL; > + } > + > + if (copy_from_user_timeval(&tv, optval_addr)) { > + return -TARGET_EFAULT; > + } > + > + ret = get_errno(setsockopt(sockfd, SOL_SOCKET, optname, > + &tv, sizeof(tv))); > + return ret; > + } > + case TARGET_SO_SNDTIMEO: > + optname = SO_SNDTIMEO; > + goto set_timeout; > /* Options with 'int' argument. */ > case TARGET_SO_DEBUG: > optname = SO_DEBUG; > @@ -1542,12 +1564,6 @@ static abi_long do_setsockopt(int sockfd, int level, > int optname, > case TARGET_SO_RCVLOWAT: > optname = SO_RCVLOWAT; > break; > - case TARGET_SO_RCVTIMEO: > - optname = SO_RCVTIMEO; > - break; > - case TARGET_SO_SNDTIMEO: > - optname = SO_SNDTIMEO; > - break; > break; > default: > goto unimplemented;
-- "Just play. Have fun. Enjoy the game." - Michael Jordan "Just play. Have fun. Enjoy the game." - Michael Jordan