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; |