History log of /haiku/src/add-ons/kernel/network/protocols/unix/UnixFifo.cpp
Revision Date Author Comments
# 303ff56a 11-Aug-2023 Trung Nguyen <trungnt282910@gmail.com>

unix: Implement SO_RCVBUF

Implemented `UnixBufferQueue::SetCapacity` so that `setsockopt`
with `SO_RCVBUF` will not always return an error.

Change-Id: I2d9be84633f84474fac64b379e9f89ef2751a094
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6816
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# b7b57869 18-Jun-2023 Trung Nguyen <trungnt282910@gmail.com>

unix: Implement datagram sockets

Implement `SOCK_DGRAM` sockets for `AF_UNIX` family.

Change-Id: If3d6f408a7d881635ccf04b080391905fdc94b13
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6617
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# f0c4b0a6 19-Mar-2021 Jérôme Duval <jerome.duval@gmail.com>

unix: get a read event when read-polling a read-shutdown socket

UnixEndpoint::Receivable(): EOF means there is nothing left to read, and
the shutdown happened on the read side or the write side.

also fix x86_64 build with trace

Change-Id: I54c806f0b900591c3d441240b8f6768dfb756bad
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3808
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 6d796a84 10-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Fixed up network stack and drivers for x86_64.

* Various compilation fixes.
* Fixes to the FreeBSD compatibility layer (from comparing the x86-
specific bits with the equivalent amd64 sources in FreeBSD).
* Compile all the Ethernet drivers except for sis900 and wb840, these
require a bit more work to fix (will file a ticket soon). Tested
ipro1000 and rtl81xx, no issues.


# 6093698c 12-Oct-2008 Jérôme Duval <korli@users.berlios.de>

No newline at end of file


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28010 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cb919155 16-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

bonefish + axeld:
* Removed the superfluous "flags" parameter from ConditionVariable::Add()
that we forgot there when we moved the flags field from
ConditionVariableEntry::Add() to Wait().
* Using this method was therefore not a good idea - only UnixFifo did, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26454 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8a1852a4 15-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Corrected the read() behavior on a read-shutdown socket. All the data
that arrived before the shutdown can still be read.
* Debug some more returns.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25514 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ea035707 02-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Support the new {send,read}_data_no_buffer() protocol hooks to avoid
unnecessary data copies and waste of memory.
* Changed the storage backend to ring_buffer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25300 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 39ae5e4d 01-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Use a mutex instead of a benaphore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25286 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6057b5ee 01-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Added a bit more debug output in UnixFifo, but disabled debug output in
all files by default.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25285 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cfb0e473 23-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed the write behavior: Blocking writes should write what they can
and loop until everything has been written. Non-blocking writes should
write as much as they can and return B_WOULD_BLOCK, if that wasn't the
whole request.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25122 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b29b956 23-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Replaced the reader/writer blocking semaphores by condition variables.
This fixes race conditions. The OpenSSH tests don't hang anymore --
instead they run the system out of memory, apparently due to a net
buffer/data node leak.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25117 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 438df7ec 19-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Riddled UnixBufferQueue class with debug code.
* Implemented temporary work-around for net_buffer append_cloned(),
which doesn't seem to work right in combination with remove_header().
Or maybe I'm just misunderstood how it is supposed to be used. Anyway,
this fixed invalid data in the stream when buffers were split by a
read.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25070 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ae3633b0 15-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

We weren't tracking the buffer size in one case, which was rewarded with
a segment violation due to NULL pointer access.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24975 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 59234b36 12-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added support for SCM_RIGHTS (sending file descriptors).
* Fixed shutdown(). It was computing the wrong fifo flags and set the
wrong ones from the wrong variable on the peer fifo.
* Generally made the Unix sockets behave more like they should. E.g.
after closing one end, it must still be possible to read from the
other (as long as there are buffered data). Also fine-tuned when to
return what errors from recv()/send().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24943 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 875757ad 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Wait states should be interruptable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24887 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9c796e6e 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added some debug output.
* Flags and timeout arguments to acquire_sem_etc() were swapped.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 65a0f233 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Looks like I had been fallen asleep before finishing the implementation.
After successfully copying the data from the receive queue into a new
buffer, we should actually return that buffer and update the queue size.
recv() doesn't KDL anymore when reading less data than queued.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24885 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb8b342d 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Protocol module for Unix domain stream type sockets. The implementation
is almost complete, but still quite buggy (receiving data has a good
chance to drop into KDL).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24884 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6d796a84bd484ccc4fb072a29c663b660180ae51 10-Aug-2012 Alex Smith <alex@alex-smith.me.uk>

Fixed up network stack and drivers for x86_64.

* Various compilation fixes.
* Fixes to the FreeBSD compatibility layer (from comparing the x86-
specific bits with the equivalent amd64 sources in FreeBSD).
* Compile all the Ethernet drivers except for sis900 and wb840, these
require a bit more work to fix (will file a ticket soon). Tested
ipro1000 and rtl81xx, no issues.


# 6093698cca17d0c8ea27b87b73f616a4c27b3065 12-Oct-2008 Jérôme Duval <korli@users.berlios.de>

No newline at end of file


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28010 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cb9191556c39d4321b6dc700532eb74f598d166d 16-Jul-2008 Axel Dörfler <axeld@pinc-software.de>

bonefish + axeld:
* Removed the superfluous "flags" parameter from ConditionVariable::Add()
that we forgot there when we moved the flags field from
ConditionVariableEntry::Add() to Wait().
* Using this method was therefore not a good idea - only UnixFifo did, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26454 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8a1852a4477ad28446454238fabc29b2ce291fb6 15-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Corrected the read() behavior on a read-shutdown socket. All the data
that arrived before the shutdown can still be read.
* Debug some more returns.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25514 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ea035707b3d55375ed24f460add69e2d51c3076b 02-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Support the new {send,read}_data_no_buffer() protocol hooks to avoid
unnecessary data copies and waste of memory.
* Changed the storage backend to ring_buffer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25300 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 39ae5e4d1275233861000e67a197b6a16268a2ca 01-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Use a mutex instead of a benaphore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25286 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6057b5ee44416b26f14a0b10c008889285c2a0bb 01-May-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Added a bit more debug output in UnixFifo, but disabled debug output in
all files by default.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25285 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cfb0e473673d2a115a173fc605a36eef7c04c98e 23-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed the write behavior: Blocking writes should write what they can
and loop until everything has been written. Non-blocking writes should
write as much as they can and return B_WOULD_BLOCK, if that wasn't the
whole request.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25122 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5b29b956f3dd018fe374c2766adaa367bcaa0259 23-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Replaced the reader/writer blocking semaphores by condition variables.
This fixes race conditions. The OpenSSH tests don't hang anymore --
instead they run the system out of memory, apparently due to a net
buffer/data node leak.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25117 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 438df7ecac73998a9f98cb417f2e03c3f80a9991 19-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Riddled UnixBufferQueue class with debug code.
* Implemented temporary work-around for net_buffer append_cloned(),
which doesn't seem to work right in combination with remove_header().
Or maybe I'm just misunderstood how it is supposed to be used. Anyway,
this fixed invalid data in the stream when buffers were split by a
read.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25070 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ae3633b0490f5d8c4c349d268ff11cf9d8121f53 15-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

We weren't tracking the buffer size in one case, which was rewarded with
a segment violation due to NULL pointer access.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24975 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 59234b36ce027000c55abc7ec2f6ff5b8f6f816b 12-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added support for SCM_RIGHTS (sending file descriptors).
* Fixed shutdown(). It was computing the wrong fifo flags and set the
wrong ones from the wrong variable on the peer fifo.
* Generally made the Unix sockets behave more like they should. E.g.
after closing one end, it must still be possible to read from the
other (as long as there are buffered data). Also fine-tuned when to
return what errors from recv()/send().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24943 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 875757adef265627e6b72751099f4748ff797208 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Wait states should be interruptable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24887 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9c796e6e71d07507cd9ab3889ed41d24eb0e5fcb 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

* Added some debug output.
* Flags and timeout arguments to acquire_sem_etc() were swapped.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 65a0f233b90e64968cafef95304745f433b6a22c 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Looks like I had been fallen asleep before finishing the implementation.
After successfully copying the data from the receive queue into a new
buffer, we should actually return that buffer and update the queue size.
recv() doesn't KDL anymore when reading less data than queued.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24885 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb8b342d5610c48f6eb319d6726491e4f360e005 09-Apr-2008 Ingo Weinhold <ingo_weinhold@gmx.de>

Protocol module for Unix domain stream type sockets. The implementation
is almost complete, but still quite buggy (receiving data has a good
chance to drop into KDL).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24884 a95241bf-73f2-0310-859d-f6bbb57e9c96