#
fe8f7e31 |
|
28-Feb-2024 |
Augustin Cavalier <waddlesplash@gmail.com> |
TCP: Let EndpointManager set Local and Peer addresses. The Local address will apparently be set by the module->bind() call in EndpointManager::_Bind(), while the Peer address will be set by EndpointManager::SetConnection(). This means that if BindChild() fails for some reason, we will now not be left in a state where the LocalAddress is set but we are unbound. That could be the cause of #17058, as that panic occurs when TCPEndpoint::IsBound() returns true, but we have not been added to the bound hash. Change-Id: I3121d0d99289d8cf83c7ed3c3e2d413feb6dad70 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7490 Reviewed-by: waddlesplash <waddlesplash@gmail.com> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
21127482 |
|
28-Jan-2020 |
Kyle Ambroff-Kao <kyle@ambroffkao.com> |
tcp: Fix KDL when sockets are reused This fixes a KDL that is triggered by the following scenario. 1. A socket is created, attempting to establish a session between (loopback, ephemeral port) => (remote address, remote port). 2. That socket ends up in the closed state because the remote is not accepting connections. 3. The socket is re-used to connect to a different (remote address, remote port). The problem is that fConnectionHash is a BOpenHashTable<TCPEndpoint>, and inserting endpoint multiple times can create a linked list cycle (TCPEndpoint is an intrusive linked list node). That means that, even though TCPEndpoint's destructor removes itself from fConnectionHash, there will still be a pointer to it left behind, which means that future accesses within that hash table bucket will result in a segfault. The added fConnectionHash.Remove(endpoint) here prevents the KDL, as it ensures that socket reuse doesn't result in a cycle. Fixes #13927, see that ticket for a detailed explanation of the problem. Also added some regression tests: * Added SocketTests::ClientSocketReuseTest to PosixNetTest, which reproduces this KDL. * BOpenHashTable: Added tests to cover RemoveUnchecked and removal of an object that isn't in the table. Change-Id: If4bcc1e0d94350a5ad9ba8e7ae6f1b783b3f6d34 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2173 Reviewed-by: Stephan Aßmus <superstippi@gmx.de>
|
#
56f097eb |
|
12-Apr-2010 |
Oliver Tappe <zooey@hirschkaefer.de> |
Applying patch by Atis Elsts: * fix connecting to INADDR_ANY work for tcp (effectively will connect to INADDR_LOOPBACK) * add same behaviour to udp * move some ipv4-specific code out of tcp into ipv4 address module * bind() and connect() now reject addresses from non-matching families * myself: minor cleanup in udp.cpp with respect to 80 chars limit Closes #5716 - many thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36192 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963d |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6f440aed |
|
24-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* net_socket_module_info::acquire_socket() now returns whether or not the socket could be acquired, ie. when its reference count is 0, it cannot be acquired anymore. This requires the protocol to do proper locking, though. * The TCP EndpointManager now checks the return value of acquire_socket(), and only returns the endpoint if that succeeded. * This fixes bug #2197. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30363 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
11112327 |
|
07-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Sockets now inherit from WeakReferenceable. * This fixes the problem when a socket changes something with regards to its parent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30000 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f964cf07 |
|
15-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* No longer leaks the EndpointManagers at unload. * Now uses an array instead of a doubly linked list to find the endpoint manager for a domain. * No longer locks the endpoint managers during TCP processing, which actually made all TCP input serialized. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29210 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
276aa463 |
|
24-Jun-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the useless InitCheck() method in {Open,Multi}HashTable (it always returned B_OK) by a Init() method, which sets the initial size and returns an error, if that fails. * Adjusted code using the classes accordingly. Replaced a few InitCheck() methods in the network code by Init(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
30a396ab |
|
19-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the endpoint manager wait on bind() if the existing connection is local, and is about to close. * This fixes several race conditions with the neon test suite that relied on TCP sockets being gone after close, and their port being available again (note, that is not what the TCP spec says, anyway, but it makes sense to do so, since we already removed the time wait state for local connections). * The endpoint manager is now using a mutex instead of a semaphore. * TCPEndpoint::_Close() now notifies the senders/receivers instead of _HandleReset(). * Besides ssl_closure(), all tests of the neon test suite seem to pass now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5abeea69 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added tracing for binds and connects as well. * Introduced the TCP_TRACING macro in tracing_config.h. * Enlarged the default trace size to something a tiny bit useful (but still acceptable for systems with little RAM). * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25235 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
db4b6bc4 |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged _Receive() and _SegmentReceived(). * Cleanup, shuffled methods around, renamed methods, etc. - no functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
42759f56 |
|
27-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* _BindToEphemeral() now remembers the last port it used, and tries a higher one next. This should work around the problem Ingo observed with the OpenSSH tests (not tested, though). * The only TCP compliant fix for this problem would be to not enter time wait for local connections at all (which I will do soon). * Another work around other implementations use is to accept incoming connections for time wait endpoints (the connection will then be replaced). I'm not yet sure if I want that behaviour, though. * Added tracing for unbinding endpoints (with stack trace) to investigate another bug (sometimes closed connections aren't actually closed). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25218 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
05849428 |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Added syscall restart support for connect(), accept(), send(), recv(), which are implemented via ioctl()s. The actual restart support is done in the net stack driver's ioctl() hook. Lower layers need to correctly deal with socket timeouts, though, for which the stack module provides support functions. * TCPEndpoint::_WaitForEstablished() does abort now when an error occurred earlier, so that trying to connect to an unused port fails immediately, as it should. * Fixed and refactored TCP connection reset handling. The new TCPEndpoint::_HandleReset() does the job. Got rid of TCPEndpoint::fError. * Fixed sequence numbers for SYNC/FINI packets. * The former two fix the problem that connections wouldn't be closed correctly and could even be reused when trying to connect again (as was reproducible with svnserve + svn). * Some style cleanup in CPEndpoint.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23984 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15ab0bcf |
|
21-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* int32_t, uint32_t are now of type "int", and no longer of type "long". This should help to reduce the number of warnings imported code will throw during compilation (helps a lot with tcpdump, for example). * Since long is 64 bit on 64 bit platforms, we might want to think about doing that change for the Haiku types int32 and uint32 as well. * Fixed several occurences of hidden type problems. * Fixed build of the stack and TCP under BeOS. * Fixed incorrect typedef in socket_interface.h. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22643 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
84052230 |
|
31-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
axeld+bonefish: Got rid of the ParentType in the HashTableDefinition; it doesn't really belong there. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21766 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
79a0d252 |
|
22-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
net_buffer: preparing for better metadata management git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21210 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8465a069 |
|
30-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added a ValueIterator to MultiHashTable to present a limited view in result of Lookup()s. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20946 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15945a11 |
|
29-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added 'tcp_endpoints' and 'tcp_endpoint' debugger commands. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20909 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f1a5bab2 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
while iterating through the endpoint table, only do so for the port in context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20867 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cd3b980 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a long standing binding issue with spawned sockets and TCP. also fixed bind() address checking rules. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
342444bc |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
replaced TCP's Endpoint Manager manual handling of endpoint lists with MultiHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5084c839 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
addressed Axel's suggestion regarding SocketAddress' GetPort() name. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20851 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77e70865 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
moved the storage requirements (i.e. ParentType *) to OpenHashTable's Definition which we now instantiate per OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20824 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2586c25e |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
use Chaining in OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20822 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
585195c2 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
introduced SocketAddress wrappers and use them in TCP. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20818 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a1a9e858 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tiny TCP cleanups git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20815 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53f23f85 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
partially rewrote TCP's endpoint manager. Fixes #1173 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20814 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d63ea33 |
|
18-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some TCP performance improvements. - support TCP fast retransmit/fast recovery. - maintain the RTT average time and update the retransmit timeout accordingly. - improvements to TCP Slow start / congestion avoidance. - better handling of the retransmission timer. - properly size segments taking the TCP options length into consideration. - as an interim fix, update the SendQ/RecvQ sizes on Connect(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20748 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03d7f17e |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
made TCP handle multiple domains. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20718 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f73dd74e |
|
10-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
even more TCP fixage. - don't try to remove spawned sockets from Endpoints hashtable. - return B_WOULD_BLOCK (EAGAIN) when we time out in acquire_sem(). - use B_RELEASE_IF_WAITING_ONLY in the TCP WaitList. - fixed a off by one issue in ReadData() which could result in more than needed iterations (and waiting). - implemented prepending new buffers to a net_buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20639 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7664bcb5 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
A couple more TCP fixes. - ipv4_bind() was broken when binding to addresses not INADDR_ANY, as it wasn't copying the address to the socket, fixed. - fixed a small issue in TCP's BindToEphemeral where the correct address might not have been bound to the socket. - some assorted TCP wait lists fixes. - fixed TCP's Connect() over the loopback interface, we might already be ESTABLISHED after _SendQueue() returns. - fixed the amount of time we wait in TCP's Accept(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20629 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aab148f6 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
Set proper address on BindToEphemeral(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20627 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a7edede4 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed multiple TCP issues. - Moved FIN handling to after Segment Text handling, it matches the RFC and fixes a possible issue with a user missing some final segment data when receiving a FIN. - Fixed the FIN handling to better terminate connections (no more senseless chatter in the end with RSTs etc). - When Bind()ing, set the socket address so a call to getsockname() gets the allocated port correctly. - After reaching the ESTABLISHED state, try to wake all pending threads (still needs work). - Corrected the maximum amount of time we wait in SendData() to respect socket->send.timeout. - Now ReadData() behaves correctly in all possible states. - There was a missing handling of MSG_DONTWAIT, fixed. - Better internal handling of PSH. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20624 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bbf8311d |
|
07-Feb-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed a race condition between deletion of the endpoint and canceling its timers; the timer functions could access invalid memory. * The endpoint manager now panics if a bound endpoint is not in the hash. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9aed1afa |
|
14-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
"step" could be zero, in which case the loop would never end. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19809 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
af3a31f7 |
|
01-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Calmed down the networking stack a lot - since it basically works, there is no reason to slow it down with debug output that much; this will also help investigating some issues where you just aren't interested in most of the output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19672 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03a53614 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
TCPEndpoint::fEndpointNextWithSamePort was not initialized when binding to an ephemeral port. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19424 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
442c0979 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed class TCPConnection to TCPEndpoint. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cbe6ce2 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Rewrote how bind() works: * there are now two hash tables: one for connections, and one for ports * the first one is used to find the endpoint for incoming connections * the latter is used to check if the address to bind() to is still available (incl. support for SO_REUSEADDR, and SO_REUSEPORT). Specialising an existing socket is not allowed, though; wildcard sockets need to be started last. * the TCPConnection class now has a pointer to the next endpoint with the same port number - this list is scanned for the existing bound sockets on that port. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
56f097ebd91d9b6369407d2bbfcc19718788d182 |
|
12-Apr-2010 |
Oliver Tappe <zooey@hirschkaefer.de> |
Applying patch by Atis Elsts: * fix connecting to INADDR_ANY work for tcp (effectively will connect to INADDR_LOOPBACK) * add same behaviour to udp * move some ipv4-specific code out of tcp into ipv4 address module * bind() and connect() now reject addresses from non-matching families * myself: minor cleanup in udp.cpp with respect to 80 chars limit Closes #5716 - many thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36192 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5147963dcd57fefa4f63c484eb88e9eaf4002976 |
|
26-Jul-2009 |
Stephan Aßmus <superstippi@gmx.de> |
headers/private/kernel/util/OpenHashTable.h, Hugo's version, is a bit nicer than Tracker's OpenHashTable.h which it should eventually replace. We've renamed the class to BOpenHashTable and changed the interface slightly so that HashTableLink became superfluous. Adapted all the code that used it. Since the OpenHashTables no longer clash, this should fix the GCC4 build. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31791 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
6f440aed2ce4661713c3ac19a16bfdceaeccbeb4 |
|
24-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* net_socket_module_info::acquire_socket() now returns whether or not the socket could be acquired, ie. when its reference count is 0, it cannot be acquired anymore. This requires the protocol to do proper locking, though. * The TCP EndpointManager now checks the return value of acquire_socket(), and only returns the endpoint if that succeeded. * This fixes bug #2197. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30363 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1111232758bd76e4ce4e7f6daddd7334249db818 |
|
07-Apr-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* Sockets now inherit from WeakReferenceable. * This fixes the problem when a socket changes something with regards to its parent. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30000 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f964cf077283ad2f5b381de0c0374dac760bd615 |
|
15-Feb-2009 |
Axel Dörfler <axeld@pinc-software.de> |
* No longer leaks the EndpointManagers at unload. * Now uses an array instead of a doubly linked list to find the endpoint manager for a domain. * No longer locks the endpoint managers during TCP processing, which actually made all TCP input serialized. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29210 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
276aa463efb0cc5b6562c46b540c01df679f77ba |
|
24-Jun-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced the useless InitCheck() method in {Open,Multi}HashTable (it always returned B_OK) by a Init() method, which sets the initial size and returns an error, if that fails. * Adjusted code using the classes accordingly. Replaced a few InitCheck() methods in the network code by Init(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26127 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
30a396ab4211fe07b7d90e6c48a3eadd301a78db |
|
19-May-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Made the endpoint manager wait on bind() if the existing connection is local, and is about to close. * This fixes several race conditions with the neon test suite that relied on TCP sockets being gone after close, and their port being available again (note, that is not what the TCP spec says, anyway, but it makes sense to do so, since we already removed the time wait state for local connections). * The endpoint manager is now using a mutex instead of a semaphore. * TCPEndpoint::_Close() now notifies the senders/receivers instead of _HandleReset(). * Besides ssl_closure(), all tests of the neon test suite seem to pass now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25564 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5abeea69a5458c008758fcdd25c503da9c38bbc5 |
|
29-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Added tracing for binds and connects as well. * Introduced the TCP_TRACING macro in tracing_config.h. * Enlarged the default trace size to something a tiny bit useful (but still acceptable for systems with little RAM). * Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25235 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
db4b6bc46caaeb073a5e176a89ea695c0b52b70e |
|
28-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* Merged _Receive() and _SegmentReceived(). * Cleanup, shuffled methods around, renamed methods, etc. - no functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25223 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
42759f5626995ede0699d0b3eb9caef2ef3d17d8 |
|
27-Apr-2008 |
Axel Dörfler <axeld@pinc-software.de> |
* _BindToEphemeral() now remembers the last port it used, and tries a higher one next. This should work around the problem Ingo observed with the OpenSSH tests (not tested, though). * The only TCP compliant fix for this problem would be to not enter time wait for local connections at all (which I will do soon). * Another work around other implementations use is to accept incoming connections for time wait endpoints (the connection will then be replaced). I'm not yet sure if I want that behaviour, though. * Added tracing for unbinding endpoints (with stack trace) to investigate another bug (sometimes closed connections aren't actually closed). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25218 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
058494285aafd433af5618aeb52abd76a4b39c6a |
|
17-Feb-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
axeld + bonefish: * Added syscall restart support for connect(), accept(), send(), recv(), which are implemented via ioctl()s. The actual restart support is done in the net stack driver's ioctl() hook. Lower layers need to correctly deal with socket timeouts, though, for which the stack module provides support functions. * TCPEndpoint::_WaitForEstablished() does abort now when an error occurred earlier, so that trying to connect to an unused port fails immediately, as it should. * Fixed and refactored TCP connection reset handling. The new TCPEndpoint::_HandleReset() does the job. Got rid of TCPEndpoint::fError. * Fixed sequence numbers for SYNC/FINI packets. * The former two fix the problem that connections wouldn't be closed correctly and could even be reused when trying to connect again (as was reproducible with svnserve + svn). * Some style cleanup in CPEndpoint.h. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23984 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15ab0bcf01ef7bd7323d9b2da55906bafbb40fd3 |
|
21-Oct-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* int32_t, uint32_t are now of type "int", and no longer of type "long". This should help to reduce the number of warnings imported code will throw during compilation (helps a lot with tcpdump, for example). * Since long is 64 bit on 64 bit platforms, we might want to think about doing that change for the Haiku types int32 and uint32 as well. * Fixed several occurences of hidden type problems. * Fixed build of the stack and TCP under BeOS. * Fixed incorrect typedef in socket_interface.h. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22643 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
84052230379abf8e556e20e499d9a6040157f4a6 |
|
31-Jul-2007 |
Axel Dörfler <axeld@pinc-software.de> |
axeld+bonefish: Got rid of the ParentType in the HashTableDefinition; it doesn't really belong there. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21766 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
79a0d25245275ef5f65afd610279dc9befffd65e |
|
22-May-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
net_buffer: preparing for better metadata management git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21210 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
8465a069104e40de35a4a56225b26ca5ba5c74f9 |
|
30-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added a ValueIterator to MultiHashTable to present a limited view in result of Lookup()s. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20946 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
15945a11c67002b10f04a6207eea5637e6c17b45 |
|
29-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
added 'tcp_endpoints' and 'tcp_endpoint' debugger commands. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20909 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f1a5bab2687439a002c91bd5a90a7a338699effb |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
while iterating through the endpoint table, only do so for the port in context. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20867 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cd3b980fd431d2fc4cabfdae2b572b866686ee9 |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed a long standing binding issue with spawned sockets and TCP. also fixed bind() address checking rules. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20866 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
342444bc95a45142c5e6fa824c96ca1c1343c84f |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
replaced TCP's Endpoint Manager manual handling of endpoint lists with MultiHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20865 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
5084c83901d6e5e4214512211b5e86d5c63926bd |
|
27-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
addressed Axel's suggestion regarding SocketAddress' GetPort() name. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20851 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77e70865e17399a31813cca47bcaca80f271b341 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
moved the storage requirements (i.e. ParentType *) to OpenHashTable's Definition which we now instantiate per OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20824 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2586c25e318e1f71ff45889b9b0d047ce03043d1 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
use Chaining in OpenHashTable. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20822 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
585195c28d3d06ee7726b04a420145dda0bd875a |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
introduced SocketAddress wrappers and use them in TCP. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20818 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a1a9e858a2d1c5b702f9a57ce657a06b148a5dd7 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
tiny TCP cleanups git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20815 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
53f23f85a2725c8fc31c7a874256084c7c623d86 |
|
25-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
partially rewrote TCP's endpoint manager. Fixes #1173 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20814 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
1d63ea33723fa8f3afac5a98fdb36b5bfe6839ee |
|
18-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
some TCP performance improvements. - support TCP fast retransmit/fast recovery. - maintain the RTT average time and update the retransmit timeout accordingly. - improvements to TCP Slow start / congestion avoidance. - better handling of the retransmission timer. - properly size segments taking the TCP options length into consideration. - as an interim fix, update the SendQ/RecvQ sizes on Connect(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20748 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03d7f17e07da19253587845073315010febc031a |
|
15-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
made TCP handle multiple domains. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20718 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f73dd74eb9660085e4db4c9f7597885bb04c1569 |
|
10-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
even more TCP fixage. - don't try to remove spawned sockets from Endpoints hashtable. - return B_WOULD_BLOCK (EAGAIN) when we time out in acquire_sem(). - use B_RELEASE_IF_WAITING_ONLY in the TCP WaitList. - fixed a off by one issue in ReadData() which could result in more than needed iterations (and waiting). - implemented prepending new buffers to a net_buffer. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20639 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7664bcb5c42ce2e8b1324de100aeabba4cfac81f |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
A couple more TCP fixes. - ipv4_bind() was broken when binding to addresses not INADDR_ANY, as it wasn't copying the address to the socket, fixed. - fixed a small issue in TCP's BindToEphemeral where the correct address might not have been bound to the socket. - some assorted TCP wait lists fixes. - fixed TCP's Connect() over the loopback interface, we might already be ESTABLISHED after _SendQueue() returns. - fixed the amount of time we wait in TCP's Accept(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20629 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
aab148f6b4cc914c3b7e0c803dfa60abe0b48c10 |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
Set proper address on BindToEphemeral(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20627 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a7edede46f377bf9b0f2710079a09f22df2771ca |
|
09-Apr-2007 |
Hugo Santos <hugosantos@nowhere.fake> |
fixed multiple TCP issues. - Moved FIN handling to after Segment Text handling, it matches the RFC and fixes a possible issue with a user missing some final segment data when receiving a FIN. - Fixed the FIN handling to better terminate connections (no more senseless chatter in the end with RSTs etc). - When Bind()ing, set the socket address so a call to getsockname() gets the allocated port correctly. - After reaching the ESTABLISHED state, try to wake all pending threads (still needs work). - Corrected the maximum amount of time we wait in SendData() to respect socket->send.timeout. - Now ReadData() behaves correctly in all possible states. - There was a missing handling of MSG_DONTWAIT, fixed. - Better internal handling of PSH. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20624 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
bbf8311d159baf236b3355cb3cf1aee05732f4d4 |
|
07-Feb-2007 |
Axel Dörfler <axeld@pinc-software.de> |
* Fixed a race condition between deletion of the endpoint and canceling its timers; the timer functions could access invalid memory. * The endpoint manager now panics if a bound endpoint is not in the hash. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20100 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9aed1afa6a8c90d7051b9596554033add02805f1 |
|
14-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
"step" could be zero, in which case the loop would never end. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19809 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
af3a31f770fcd8b7e8c5171342cba155bef6dc9e |
|
01-Jan-2007 |
Axel Dörfler <axeld@pinc-software.de> |
Calmed down the networking stack a lot - since it basically works, there is no reason to slow it down with debug output that much; this will also help investigating some issues where you just aren't interested in most of the output. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19672 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
03a536148f138a445136763e4cb953b60437888b |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
TCPEndpoint::fEndpointNextWithSamePort was not initialized when binding to an ephemeral port. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19424 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
442c0979467981e68c45820d6e5d931a13c2ad82 |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Renamed class TCPConnection to TCPEndpoint. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19418 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
9cbe6ce20025d6de096cbd167bb1f83669d1032a |
|
04-Dec-2006 |
Axel Dörfler <axeld@pinc-software.de> |
Rewrote how bind() works: * there are now two hash tables: one for connections, and one for ports * the first one is used to find the endpoint for incoming connections * the latter is used to check if the address to bind() to is still available (incl. support for SO_REUSEADDR, and SO_REUSEPORT). Specialising an existing socket is not allowed, though; wildcard sockets need to be started last. * the TCPConnection class now has a pointer to the next endpoint with the same port number - this list is scanned for the existing bound sockets on that port. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19416 a95241bf-73f2-0310-859d-f6bbb57e9c96
|