q3server
Matthew Dillon
dillon at apollo.backplane.com
Sun Apr 4 16:12:23 PDT 2004
Here's what I get:
...
1428 q3ded CALL gettimeofday(0xbfbfeea4,0)
1428 q3ded RET gettimeofday 0
1428 q3ded CALL read(0,0xbfbfb987,0x1)
1428 q3ded RET read -1 errno 11 Resource deadlock avoided
1428 q3ded CALL linux_socketcall(0xc,0xbfbfb998)
1428 q3ded GIO fd 12 read 16 bytes
"\M^?\M^?\M^?\M^?getchallenge"
1428 q3ded RET linux_socketcall 16/0x10
1428 q3ded CALL gettimeofday(0xbfbfba00,0)
1428 q3ded RET gettimeofday 0
1428 q3ded CALL linux_socketcall(0xb,0xbfbf74f8)
1428 q3ded RET linux_socketcall -1 errno 92 Unknown error: 92
1428 q3ded CALL write(0x2,0xbfbf64e8,0x43)
1428 q3ded GIO fd 2 wrote 67 bytes
"NET_SendPacket ERROR: Protocol not available to 192.168.0.69:27960
"
1428 q3ded RET write 67/0x43
1428 q3ded CALL write(0xd,0xbfbf64e8,0x43)
1428 q3ded GIO fd 13 wrote 67 bytes
"NET_SendPacket ERROR: Protocol not available to 192.168.0.69:27960
"
So, a linux_socketcall(0xb = LINUX_SENDTO, ...) is failing with error
code 92. Error code 92 == BSD error code 42 == ENOPROTOOPT.
I think the problem is that the linux_sendto() code is incorrectly
aborting when the IPPROTO_IP/IP_HDRINCL socket opt fails. FreeBSD-4
does not do this, it simply assumes that IP_HDRINCL is not set.
Sascha, please try the below patch and tell us if it fixes the
q3 problem.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
Index: linux_socket.c
===================================================================
RCS file: /cvs/src/sys/emulation/linux/linux_socket.c,v
retrieving revision 1.16
diff -u -r1.16 linux_socket.c
--- linux_socket.c 9 Jan 2004 21:49:30 -0000 1.16
+++ linux_socket.c 4 Apr 2004 23:10:56 -0000
@@ -677,9 +677,8 @@
sopt.sopt_valsize = sizeof(optval);
sopt.sopt_td = NULL;
- error = kern_getsockopt(linux_args.s, &sopt);
- if (error)
- return (error);
+ if (kern_getsockopt(linux_args.s, &sopt) != 0)
+ optval = 0;
if (optval == 0) {
/*
More information about the Bugs
mailing list