* socket_spawn_pending() forgot to set the socket's parent field.

* socket_recv[from]() now accept a NULL buffer in case there was nothing to read.
* the tcp_tester's server thread now actually reads the data it receives.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19400 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-11-30 20:43:24 +00:00
parent 41c6726359
commit 94fb808a48
2 changed files with 25 additions and 2 deletions
@@ -232,6 +232,7 @@ socket_spawn_pending(net_socket *parent, net_socket **_socket)
// add to the parent's list of pending connections
list_add_item(&parent->pending_children, socket);
socket->parent = parent;
parent->child_count++;
*_socket = socket;
@@ -637,6 +638,10 @@ socket_recv(net_socket *socket, void *data, size_t length, int flags)
if (status < B_OK)
return status;
// if 0 bytes we're received, no buffer will be created
if (buffer == NULL)
return 0;
ssize_t bytesReceived = buffer->size;
gNetBufferModule.read(buffer, 0, data, bytesReceived);
gNetBufferModule.free(buffer);
@@ -655,6 +660,10 @@ socket_recvfrom(net_socket *socket, void *data, size_t length, int flags,
if (status < B_OK)
return status;
// if 0 bytes we're received, no buffer will be created
if (buffer == NULL)
return 0;
ssize_t bytesReceived = buffer->size;
gNetBufferModule.read(buffer, 0, data, bytesReceived);
+16 -2
View File
@@ -382,11 +382,15 @@ ssize_t
socket_recv(net_socket *socket, void *data, size_t length, int flags)
{
net_buffer *buffer;
status_t status = socket->first_info->read_data(
ssize_t status = socket->first_info->read_data(
socket->first_protocol, length, flags, &buffer);
if (status < B_OK)
return status;
// if 0 bytes we're received, no buffer will be created
if (buffer == NULL)
return 0;
ssize_t bytesReceived = buffer->size;
gNetBufferModule.read(buffer, 0, data, bytesReceived);
gNetBufferModule.free(buffer);
@@ -421,6 +425,7 @@ socket_spawn_pending(net_socket *parent, net_socket **_socket)
// add to the parent's list of pending connections
list_add_item(&parent->pending_children, socket);
socket->parent = parent;
parent->child_count++;
*_socket = socket;
@@ -1041,7 +1046,16 @@ server_thread(void*)
break;
}
printf("server: got connection from %ld\n", address.sin_addr.s_addr);
printf("server: got connection from %08lx\n", address.sin_addr.s_addr);
char buffer[1024];
ssize_t bytesRead;
while ((bytesRead = socket_recv(connectionSocket, buffer, sizeof(buffer), 0)) >= 0) {
printf("server: received %ld bytes\n", bytesRead);
}
printf("server: receiving failed: %s\n", strerror(bytesRead));
close_protocol(connectionSocket->first_protocol);
}
return 0;