Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4602 → Rev 4603

/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