Changes in uspace/srv/net/tcp/sock.c [05bfce7:257feec] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tcp/sock.c
r05bfce7 r257feec 179 179 } 180 180 181 sock->laddr.ipv4 = TCP_IPV4_ANY;181 inet_addr_any(&sock->laddr); 182 182 sock->lconn = NULL; 183 183 sock->backlog = 0; … … 314 314 log_msg(LOG_DEFAULT, LVL_DEBUG, " - open connections"); 315 315 316 lsocket.addr.ipv4 = TCP_IPV4_ANY;316 inet_addr_any(&lsocket.addr); 317 317 lsocket.port = sock_core->port; 318 fsocket.addr.ipv4 = TCP_IPV4_ANY; 318 319 inet_addr_any(&fsocket.addr); 319 320 fsocket.port = TCP_PORT_ANY; 320 321 … … 396 397 fibril_mutex_lock(&socket->lock); 397 398 398 if ( socket->laddr.ipv4 == TCP_IPV4_ANY) {399 if (inet_addr_is_any(&socket->laddr)) { 399 400 /* Determine local IP address */ 400 inet_addr_t loc_addr, rem_addr; 401 402 rem_addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 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); 403 406 rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr); 404 407 if (rc != EOK) { … … 409 412 return; 410 413 } 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; 414 415 socket->laddr = loc_addr; 416 } 417 418 lsocket.addr = socket->laddr; 417 419 lsocket.port = sock_core->port; 418 fsocket.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 420 421 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr), 422 &fsocket.addr); 419 423 fsocket.port = uint16_t_be2host(addr->sin_port); 420 424 … … 425 429 426 430 fibril_mutex_unlock(&socket->lock); 427 431 428 432 switch (trc) { 429 433 case TCP_EOK: … … 436 440 assert(false); 437 441 } 438 442 439 443 if (rc == EOK) 440 444 fibril_add_ready(socket->recv_fibril); 441 445 442 446 async_answer_0(callid, rc); 443 447 } … … 507 511 /* Replenish listening connection */ 508 512 509 lsocket.addr.ipv4 = TCP_IPV4_ANY;513 inet_addr_any(&lsocket.addr); 510 514 lsocket.port = sock_core->port; 511 fsocket.addr.ipv4 = TCP_IPV4_ANY; 515 516 inet_addr_any(&fsocket.addr); 512 517 fsocket.port = TCP_PORT_ANY; 513 518 … … 682 687 socket = (tcp_sockdata_t *)sock_core->specific_data; 683 688 fibril_mutex_lock(&socket->lock); 684 689 685 690 if (socket->conn == NULL) { 686 691 fibril_mutex_unlock(&socket->lock); … … 698 703 &socket->recv_buffer_lock); 699 704 } 700 705 701 706 log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer"); 702 707 … … 718 723 assert(false); 719 724 } 720 725 721 726 log_msg(LOG_DEFAULT, LVL_DEBUG, "**** recv result -> %d", rc); 727 722 728 if (rc != EOK) { 723 729 fibril_mutex_unlock(&socket->recv_buffer_lock); … … 728 734 729 735 if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) { 730 /* Fill addr */736 /* Fill address */ 731 737 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 732 748 addr.sin_family = AF_INET; 733 addr.sin_addr.s_addr = host2uint32_t_be(rsock ->addr.ipv4);749 addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr); 734 750 addr.sin_port = host2uint16_t_be(rsock->port); 735 751 … … 754 770 } 755 771 } 756 772 757 773 log_msg(LOG_DEFAULT, LVL_DEBUG, "data read receive"); 758 774 if (!async_data_read_receive(&rcallid, &length)) { … … 762 778 return; 763 779 } 764 780 765 781 if (length > data_len) 766 782 length = data_len; 767 783 768 784 log_msg(LOG_DEFAULT, LVL_DEBUG, "data read finalize"); 769 785 rc = async_data_read_finalize(rcallid, socket->recv_buffer, length); 770 786 771 787 socket->recv_buffer_used -= length; 772 788 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_recvfrom: %zu left in buffer", … … 777 793 tcp_sock_notify_data(socket->sock_core); 778 794 } 779 795 780 796 fibril_condvar_broadcast(&socket->recv_buffer_cv); 781 797 … … 785 801 SOCKET_SET_READ_DATA_LENGTH(answer, length); 786 802 async_answer_1(callid, EOK, IPC_GET_ARG1(answer)); 787 803 788 804 fibril_mutex_unlock(&socket->recv_buffer_lock); 789 805 fibril_mutex_unlock(&socket->lock);
Note:
See TracChangeset
for help on using the changeset viewer.