/branches/network/uspace/srv/net/socket/socket_core.c |
---|
143,11 → 143,11 |
if( ! socket ) return ENOTSOCK; |
socket_ports_exclude( global_sockets, socket->port ); |
// destroy all accepted sockets |
while(( accepted_id = dyn_fifo_pop( & socket->accepted ))){ |
while(( accepted_id = dyn_fifo_pop( & socket->accepted )) >= 0 ){ |
socket_destroy( packet_phone, accepted_id, local_sockets, global_sockets ); |
} |
// release all received packets |
while(( packet_id = dyn_fifo_pop( & socket->received ))){ |
while(( packet_id = dyn_fifo_pop( & socket->received )) >= 0 ){ |
pq_release( packet_phone, packet_id ); |
} |
dyn_fifo_destroy( & socket->received ); |
/branches/network/uspace/srv/net/socket/socket_messages.h |
---|
69,6 → 69,8 |
#define SOCKET_GET_OPT_LEVEL( call ) ( int ) IPC_GET_ARG2( * call ) |
#define SOCKET_SET_DATA_FRAGMENTS( call ) ( int * ) & IPC_GET_ARG2( * call ) |
#define SOCKET_GET_DATA_FRAGMENTS( call ) ( int ) IPC_GET_ARG2( * call ) |
#define SOCKET_SET_ADDRESS_LENGTH( call ) ( size_t * ) & IPC_GET_ARG2( * call ) |
#define SOCKET_GET_ADDRESS_LENGTH( call ) ( size_t ) IPC_GET_ARG2( * call ) |
#define SOCKET_SET_DATA_FRAGMENT_SIZE( call ) ( int * ) & IPC_GET_ARG3( * call ) |
#define SOCKET_GET_DATA_FRAGMENT_SIZE( call ) ( int ) IPC_GET_ARG3( * call ) |
/branches/network/uspace/srv/net/socket/socket_client.c |
---|
454,6 → 454,7 |
if( ! data ) return EBADMEM; |
if( ! datalength ) return NO_DATA; |
if( fromaddr && (( ! addrlen ) || ( * addrlen < sizeof( struct sockaddr_in )))) return EINVAL; |
// find the socket |
socket = sockets_find( socket_get_sockets(), socket_id ); |
if( ! socket ) return ENOTSOCK; |
473,9 → 474,6 |
// request packet data |
message_id = async_send_4( socket->phone, message, socket->socket_id, 0, socket->service, flags, & answer ); |
// read the address if desired |
if( fromaddr ){ |
* addrlen = sizeof( struct sockaddr_in ); |
} |
if(( ! fromaddr ) || ( ipc_data_read_start( socket->phone, fromaddr, * addrlen ) == EOK )){ |
if( fragments == 1 ){ |
// read all if only one fragment |
503,6 → 501,8 |
dyn_fifo_pop( & socket->received ); |
// return read data length |
result = SOCKET_GET_READ_DATA_LENGTH( & answer ); |
// set address length |
if( fromaddr && addrlen ) * addrlen = SOCKET_GET_ADDRESS_LENGTH( & answer ); |
} |
fibril_mutex_unlock( & socket->receive_lock ); |
return result; |
/branches/network/uspace/srv/net/socket/Makefile |
---|
37,6 → 37,7 |
LIB = lib$(NAME).a |
SOURCES = \ |
$(NAME)_client.c \ |
$(NET_BASE)modules.c \ |
$(NET_BASE)inet.c \ |
$(STRUCTURES)dynamic_fifo.c |