* 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:
@@ -232,6 +232,7 @@ socket_spawn_pending(net_socket *parent, net_socket **_socket)
|
|||||||
|
|
||||||
// add to the parent's list of pending connections
|
// add to the parent's list of pending connections
|
||||||
list_add_item(&parent->pending_children, socket);
|
list_add_item(&parent->pending_children, socket);
|
||||||
|
socket->parent = parent;
|
||||||
parent->child_count++;
|
parent->child_count++;
|
||||||
|
|
||||||
*_socket = socket;
|
*_socket = socket;
|
||||||
@@ -637,6 +638,10 @@ socket_recv(net_socket *socket, void *data, size_t length, int flags)
|
|||||||
if (status < B_OK)
|
if (status < B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
// if 0 bytes we're received, no buffer will be created
|
||||||
|
if (buffer == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ssize_t bytesReceived = buffer->size;
|
ssize_t bytesReceived = buffer->size;
|
||||||
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
||||||
gNetBufferModule.free(buffer);
|
gNetBufferModule.free(buffer);
|
||||||
@@ -655,6 +660,10 @@ socket_recvfrom(net_socket *socket, void *data, size_t length, int flags,
|
|||||||
if (status < B_OK)
|
if (status < B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
// if 0 bytes we're received, no buffer will be created
|
||||||
|
if (buffer == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ssize_t bytesReceived = buffer->size;
|
ssize_t bytesReceived = buffer->size;
|
||||||
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
||||||
|
|
||||||
|
|||||||
@@ -382,11 +382,15 @@ ssize_t
|
|||||||
socket_recv(net_socket *socket, void *data, size_t length, int flags)
|
socket_recv(net_socket *socket, void *data, size_t length, int flags)
|
||||||
{
|
{
|
||||||
net_buffer *buffer;
|
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);
|
socket->first_protocol, length, flags, &buffer);
|
||||||
if (status < B_OK)
|
if (status < B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
// if 0 bytes we're received, no buffer will be created
|
||||||
|
if (buffer == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ssize_t bytesReceived = buffer->size;
|
ssize_t bytesReceived = buffer->size;
|
||||||
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
gNetBufferModule.read(buffer, 0, data, bytesReceived);
|
||||||
gNetBufferModule.free(buffer);
|
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
|
// add to the parent's list of pending connections
|
||||||
list_add_item(&parent->pending_children, socket);
|
list_add_item(&parent->pending_children, socket);
|
||||||
|
socket->parent = parent;
|
||||||
parent->child_count++;
|
parent->child_count++;
|
||||||
|
|
||||||
*_socket = socket;
|
*_socket = socket;
|
||||||
@@ -1041,7 +1046,16 @@ server_thread(void*)
|
|||||||
break;
|
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;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user