Subversion Repositories HelenOS

Rev

Rev 4729 | Rev 4743 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4729 Rev 4736
Line 338... Line 338...
338
                    // create a new scoket
338
                    // create a new scoket
339
                    new_socket = ( socket_ref ) malloc( sizeof( socket_t ));
339
                    new_socket = ( socket_ref ) malloc( sizeof( socket_t ));
340
                    if( ! new_socket ){
340
                    if( ! new_socket ){
341
                        ERROR_CODE = ENOMEM;
341
                        ERROR_CODE = ENOMEM;
342
                    }else{
342
                    }else{
-
 
343
                        bzero( socket, sizeof( * socket ));
343
                        socket_initialize( new_socket, SOCKET_GET_SOCKET_ID( call ), socket->phone, socket->service );
344
                        socket_initialize( new_socket, SOCKET_GET_SOCKET_ID( call ), socket->phone, socket->service );
344
                        ERROR_CODE = sockets_add( socket_get_sockets(), new_socket->socket_id, new_socket );
345
                        ERROR_CODE = sockets_add( socket_get_sockets(), new_socket->socket_id, new_socket );
345
                        if( ERROR_CODE < 0 ){
346
                        if( ERROR_CODE < 0 ){
346
                            free( new_socket );
347
                            free( new_socket );
347
                        }else{
348
                        }else{
Line 428... Line 429...
428
            return EPFNOSUPPORT;
429
            return EPFNOSUPPORT;
429
    }
430
    }
430
    // create a new socket structure
431
    // create a new socket structure
431
    socket = ( socket_ref ) malloc( sizeof( socket_t ));
432
    socket = ( socket_ref ) malloc( sizeof( socket_t ));
432
    if( ! socket ) return ENOMEM;
433
    if( ! socket ) return ENOMEM;
433
    if( ERROR_OCCURRED( dyn_fifo_initialize( & socket->received, SOCKET_INITIAL_RECEIVED_SIZE ))){
-
 
434
        free( socket );
-
 
435
        return ERROR_CODE;
-
 
436
    }
-
 
437
    if( ERROR_OCCURRED( dyn_fifo_initialize( & socket->accepted, SOCKET_INITIAL_ACCEPTED_SIZE ))){
-
 
438
        dyn_fifo_destroy( & socket->received );
434
    bzero( socket, sizeof( * socket ));
439
        free( socket );
-
 
440
        return ERROR_CODE;
-
 
441
    }
-
 
442
    // request a new socket
435
    // request a new socket
443
    if( ERROR_OCCURRED(( int ) async_req_3_3( phone, NET_SOCKET, 0, 0, service, ( ipcarg_t * ) & socket_id, ( ipcarg_t * ) & socket->data_fragment_size, ( ipcarg_t * ) & socket->header_size ))){
436
    if( ERROR_OCCURRED(( int ) async_req_3_3( phone, NET_SOCKET, 0, 0, service, ( ipcarg_t * ) & socket_id, ( ipcarg_t * ) & socket->data_fragment_size, ( ipcarg_t * ) & socket->header_size ))){
444
        dyn_fifo_destroy( & socket->received );
-
 
445
        dyn_fifo_destroy( & socket->accepted );
-
 
446
        free( socket );
437
        free( socket );
447
        return ERROR_CODE;
438
        return ERROR_CODE;
448
    }
439
    }
449
    // finish the new socket initialization
440
    // finish the new socket initialization
450
    socket_initialize( socket, socket_id, phone, service );
441
    socket_initialize( socket, socket_id, phone, service );
Line 547... Line 538...
547
    fibril_mutex_unlock( & socket->accept_lock );
538
    fibril_mutex_unlock( & socket->accept_lock );
548
    return result;
539
    return result;
549
}
540
}
550
 
541
 
551
int connect( int socket_id, const struct sockaddr * serv_addr, socklen_t addrlen ){
542
int connect( int socket_id, const struct sockaddr * serv_addr, socklen_t addrlen ){
-
 
543
    if( ! serv_addr ) return EDESTADDRREQ;
-
 
544
    if( ! addrlen ) return EDESTADDRREQ;
552
    // send the address
545
    // send the address
553
    return socket_send_data( socket_id, NET_SOCKET_CONNECT, 0, serv_addr, addrlen );
546
    return socket_send_data( socket_id, NET_SOCKET_CONNECT, 0, serv_addr, addrlen );
554
}
547
}
555
 
548
 
556
int closesocket( int socket_id ){
549
int closesocket( int socket_id ){
Line 592... Line 585...
592
    // without the address
585
    // without the address
593
    return sendto_core( NET_SOCKET_SEND, socket_id, data, datalength, flags, NULL, 0 );
586
    return sendto_core( NET_SOCKET_SEND, socket_id, data, datalength, flags, NULL, 0 );
594
}
587
}
595
 
588
 
596
int sendto( int socket_id, const void * data, size_t datalength, int flags, const struct sockaddr * toaddr, socklen_t addrlen ){
589
int sendto( int socket_id, const void * data, size_t datalength, int flags, const struct sockaddr * toaddr, socklen_t addrlen ){
597
    if( ! toaddr ) return EBADMEM;
590
    if( ! toaddr ) return EDESTADDRREQ;
598
    if( ! addrlen ) return NO_DATA;
591
    if( ! addrlen ) return EDESTADDRREQ;
599
    // with the address
592
    // with the address
600
    return sendto_core( NET_SOCKET_SENDTO, socket_id, data, datalength, flags, toaddr, addrlen );
593
    return sendto_core( NET_SOCKET_SENDTO, socket_id, data, datalength, flags, toaddr, addrlen );
601
}
594
}
602
 
595
 
603
int sendto_core( ipcarg_t message, int socket_id, const void * data, size_t datalength, int flags, const struct sockaddr * toaddr, socklen_t addrlen ){
596
int sendto_core( ipcarg_t message, int socket_id, const void * data, size_t datalength, int flags, const struct sockaddr * toaddr, socklen_t addrlen ){