Closed
Bug 35408
Opened 25 years ago
Closed 25 years ago
PR_NewTCPSocketPair needs to create a thread to do the connect
Categories
(NSPR :: NSPR, defect, P3)
Tracking
(Not tracked)
RESOLVED
FIXED
4.0.2
People
(Reporter: wtc, Assigned: larryh)
References
Details
Attachments
(3 files)
|
3.29 KB,
patch
|
Details | Diff | Splinter Review | |
|
3.29 KB,
patch
|
Details | Diff | Splinter Review | |
|
1.74 KB,
text/plain
|
Details |
PR_NewTCPSocketPair currently uses only one thread
to connect the two TCP sockets together. It first
initiates a (nonblocking) connect, and then does an
accept. It appears that this doesn't work with the
winsock of WinGate. We may need to create a
temporary thread to do the connect.
| Reporter | ||
Comment 1•25 years ago
|
||
| Reporter | ||
Comment 2•25 years ago
|
||
| Reporter | ||
Comment 3•25 years ago
|
||
There is a thread of discussion on this bug
in the mozilla.netlib newsgroup titled
"BIG WinGate Bug".
mkaply reported that PR_Connect failed with
the error codes (-5981, 10061). (10061 is
WSAECONNREFUSED.) He also reported that my
proposed fix of creating a new thread to do
the connect didn't work.
| Reporter | ||
Comment 4•25 years ago
|
||
Reassigned the bug to larryh.
It turns out that the PR_Connect failure
has nothing to do with using the same thread
to do both the connect and accept. The PR_Connect
failure is caused by WinGate. It appears that
WinGate rejects all connections to the host's
IP address, even if the connections are from
the host itself. However, Larry discovered that
if the listening socket is bound to the loopback
address (as opposed to a normal IP address of
the host), then WinGate allows connections from
the local host to that listening socket.
There is another problem on OS/2: the OS/2 TCP/IP
stack does not have the loopback address enabled
by default. We will need to do a different
implementation of PR_NewPollableEvent on OS/2,
possibly using a pair of local sockets.
Assignee: wtc → larryh
Cool. I'm going to start checking if PR_NewPollableEvent fails and start using
this 5ms poll in such case instead in the meantime.
| Assignee | ||
Updated•25 years ago
|
Status: NEW → ASSIGNED
| Assignee | ||
Comment 7•25 years ago
|
||
PR_NewTCPSocketPair() uses a pair of sockets on Win32. One socket, the listening
socket, is bound to the host address of the local machine, the other socket is
bound to the loopback address. When this is used with WinGate, WinGate appears
to refuse the connection from the local machine's IP address connecting to the
loopback address. I queried WinGate to see if this was the intended behavior?
The have not responded to 2 queries.
As an experiment, I caused PR_NewTCPSocketPair() to use the loopback address on
both sockets. This worked when used with the NSPR testcase pr/tests/pollable.c.
I provided this patch to Mike Kaply (IBM, Austin) who reported the WinGate
problem. He reports building NSPR, running it with his Mozilla and WinGate and
it works for him.
I will change PR_NewTCPSocketPair() to use the loopback address for both ends of
the socket pair for generic Win32. Other platforms will remain unchanged. ...
What does this do to Windows NT? ... Comments?
See also: BugZilla 28403
WinNT will be just fine. I've tested the method on this WinNt computer.
Actually, INADDR_LOOPBACK is logically correct for all platforms. With
INADDR_ANY, the guy in the next office -- or someone on the other side of the
world -- could probe your port at the wrong moment and cause your program to
crash!
Be sure to test against HTTPS. This same bug affects PSM (because PSM also
calls PR_NewTCPSocketPair()). PSM MAY also suffer from a similar oversight when
setting up communication with Mozilla.
| Assignee | ||
Comment 9•25 years ago
|
||
Checking in prsocket.c;
/cvsroot/mozilla/nsprpub/pr/src/io/prsocket.c,v <-- prsocket.c
new revision: 3.30; previous revision: 3.29
Checked in repair to NSPR tip.
| Reporter | ||
Comment 10•25 years ago
|
||
Larry: I verified that your fix works on Mac. The
pollable.c test passed. Please go ahead and check
in your fix on both NSPRPUB_RELEASE_4_0_BRANCH and
NSPRPUB_CLIENT_BRANCH, without any ifdef's.
Ruslan: this shows that the pollable events work on
Mac too. You might want to define USE_POLLABLE_EVENT
for Mac in nsSocketTransportService.h.
| Assignee | ||
Comment 11•25 years ago
|
||
Checked in fix to NSPRPUB_RELEASE_4_0_BRANCH
Checking in prsocket.c;
/cvsroot/mozilla/nsprpub/pr/src/io/prsocket.c,v <-- prsocket.c
new revision: 3.27.4.7; previous revision: 3.27.4.6
| Assignee | ||
Comment 12•25 years ago
|
||
Checked into NSPRPUB_CLIENT_BRANCH
Checking in prsocket.c;
/cvsroot/mozilla/nsprpub/pr/src/io/prsocket.c,v <-- prsocket.c
new revision: 3.28.2.1; previous revision: 3.28
done
| Assignee | ||
Comment 13•25 years ago
|
||
marking this fixed.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
| Reporter | ||
Updated•25 years ago
|
Target Milestone: --- → 4.0.1
| Reporter | ||
Updated•25 years ago
|
Target Milestone: 4.0.1 → 4.0.2
You need to log in
before you can comment on or make changes to this bug.
Description
•