* Added TCPEndpoint::GetOption(), currently only supports TCP_NODELAY, and

TCP_MAXSEG.
* Note, TCP_MAXSEG cannot be set yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25241 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2008-04-29 09:26:24 +00:00
parent 6289578982
commit 895d7215fb
3 changed files with 33 additions and 4 deletions
@@ -906,7 +906,33 @@ TCPEndpoint::SetReceiveBufferSize(size_t length)
status_t
TCPEndpoint::SetOption(int option, const void *_value, int length)
TCPEndpoint::GetOption(int option, void* _value, int* _length)
{
if (*_length != sizeof(int))
return B_BAD_VALUE;
int* value = (int*)_value;
switch (option) {
case TCP_NODELAY:
if ((fOptions & TCP_NODELAY) != 0)
*value = 1;
else
*value = 0;
return B_OK;
case TCP_MAXSEG:
*value = fReceiveMaxSegmentSize;
return B_OK;
default:
return B_BAD_VALUE;
}
}
status_t
TCPEndpoint::SetOption(int option, const void* _value, int length)
{
if (option != TCP_NODELAY)
return B_BAD_VALUE;
@@ -914,7 +940,7 @@ TCPEndpoint::SetOption(int option, const void *_value, int length)
if (length != sizeof(int))
return B_BAD_VALUE;
const int *value = (const int *)_value;
const int* value = (const int*)_value;
MutexLocker _(fLock);
if (*value)
@@ -68,6 +68,7 @@ public:
status_t SetSendBufferSize(size_t length);
status_t SetReceiveBufferSize(size_t length);
status_t GetOption(int option, void* value, int* _length);
status_t SetOption(int option, const void* value, int length);
tcp_state State() const { return fState; }
@@ -334,7 +334,7 @@ name_for_state(tcp_state state)
case TIME_WAIT:
return "time-wait";
}
return "-";
}
@@ -507,7 +507,9 @@ tcp_getsockopt(net_protocol *_protocol, int level, int option, void *value,
{
TCPEndpoint *protocol = (TCPEndpoint *)_protocol;
/* TODO getting IPPROTO_TCP options is missing */
if (level == IPPROTO_TCP)
return protocol->GetOption(option, value, _length);
return protocol->next->module->getsockopt(protocol->next, level, option,
value, _length);
}