Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tcp/sock.c

    r257feec r05bfce7  
    179179        }
    180180
    181         inet_addr_any(&sock->laddr);
     181        sock->laddr.ipv4 = TCP_IPV4_ANY;
    182182        sock->lconn = NULL;
    183183        sock->backlog = 0;
     
    314314        log_msg(LOG_DEFAULT, LVL_DEBUG, " - open connections");
    315315       
    316         inet_addr_any(&lsocket.addr);
     316        lsocket.addr.ipv4 = TCP_IPV4_ANY;
    317317        lsocket.port = sock_core->port;
    318        
    319         inet_addr_any(&fsocket.addr);
     318        fsocket.addr.ipv4 = TCP_IPV4_ANY;
    320319        fsocket.port = TCP_PORT_ANY;
    321320       
     
    397396        fibril_mutex_lock(&socket->lock);
    398397
    399         if (inet_addr_is_any(&socket->laddr)) {
     398        if (socket->laddr.ipv4 == TCP_IPV4_ANY) {
    400399                /* Determine local IP address */
    401                 inet_addr_t loc_addr;
    402                 inet_addr_t rem_addr;
    403                
    404                 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
    405                     &rem_addr);
     400                inet_addr_t loc_addr, rem_addr;
     401
     402                rem_addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
    406403                rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr);
    407404                if (rc != EOK) {
     
    412409                        return;
    413410                }
    414                
    415                 socket->laddr = loc_addr;
    416         }
    417        
    418         lsocket.addr = socket->laddr;
     411
     412                socket->laddr.ipv4 = loc_addr.ipv4;
     413                log_msg(LOG_DEFAULT, LVL_DEBUG, "Local IP address is %x", socket->laddr.ipv4);
     414        }
     415
     416        lsocket.addr.ipv4 = socket->laddr.ipv4;
    419417        lsocket.port = sock_core->port;
    420        
    421         inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr),
    422             &fsocket.addr);
     418        fsocket.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr);
    423419        fsocket.port = uint16_t_be2host(addr->sin_port);
    424420
     
    429425
    430426        fibril_mutex_unlock(&socket->lock);
    431        
     427
    432428        switch (trc) {
    433429        case TCP_EOK:
     
    440436                assert(false);
    441437        }
    442        
     438
    443439        if (rc == EOK)
    444440                fibril_add_ready(socket->recv_fibril);
    445        
     441
    446442        async_answer_0(callid, rc);
    447443}
     
    511507        /* Replenish listening connection */
    512508
    513         inet_addr_any(&lsocket.addr);
     509        lsocket.addr.ipv4 = TCP_IPV4_ANY;
    514510        lsocket.port = sock_core->port;
    515        
    516         inet_addr_any(&fsocket.addr);
     511        fsocket.addr.ipv4 = TCP_IPV4_ANY;
    517512        fsocket.port = TCP_PORT_ANY;
    518513
     
    687682        socket = (tcp_sockdata_t *)sock_core->specific_data;
    688683        fibril_mutex_lock(&socket->lock);
    689        
     684
    690685        if (socket->conn == NULL) {
    691686                fibril_mutex_unlock(&socket->lock);
     
    703698                    &socket->recv_buffer_lock);
    704699        }
    705        
     700
    706701        log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer");
    707702
     
    723718                assert(false);
    724719        }
    725        
     720
    726721        log_msg(LOG_DEFAULT, LVL_DEBUG, "**** recv result -> %d", rc);
    727        
    728722        if (rc != EOK) {
    729723                fibril_mutex_unlock(&socket->recv_buffer_lock);
     
    734728
    735729        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    736                 /* Fill address */
     730                /* Fill addr */
    737731                rsock = &socket->conn->ident.foreign;
    738                
    739                 uint32_t rsock_addr;
    740                 int rc = inet_addr_pack(&rsock->addr, &rsock_addr);
    741                 if (rc != EOK) {
    742                         fibril_mutex_unlock(&socket->recv_buffer_lock);
    743                         fibril_mutex_unlock(&socket->lock);
    744                         async_answer_0(callid, rc);
    745                         return;
    746                 }
    747                
    748732                addr.sin_family = AF_INET;
    749                 addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr);
     733                addr.sin_addr.s_addr = host2uint32_t_be(rsock->addr.ipv4);
    750734                addr.sin_port = host2uint16_t_be(rsock->port);
    751735
     
    770754                }
    771755        }
    772        
     756
    773757        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read receive");
    774758        if (!async_data_read_receive(&rcallid, &length)) {
     
    778762                return;
    779763        }
    780        
     764
    781765        if (length > data_len)
    782766                length = data_len;
    783        
     767
    784768        log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize");
    785769        rc = async_data_read_finalize(rcallid, socket->recv_buffer, length);
    786        
     770
    787771        socket->recv_buffer_used -= length;
    788772        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_recvfrom: %zu left in buffer",
     
    793777                tcp_sock_notify_data(socket->sock_core);
    794778        }
    795        
     779
    796780        fibril_condvar_broadcast(&socket->recv_buffer_cv);
    797781
     
    801785        SOCKET_SET_READ_DATA_LENGTH(answer, length);
    802786        async_answer_1(callid, EOK, IPC_GET_ARG1(answer));
    803        
     787
    804788        fibril_mutex_unlock(&socket->recv_buffer_lock);
    805789        fibril_mutex_unlock(&socket->lock);
Note: See TracChangeset for help on using the changeset viewer.