Changes in uspace/srv/net/udp/sock.c [a2e3ee6:6b0b508] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/udp/sock.c
ra2e3ee6 r6b0b508 199 199 } 200 200 201 socket = (udp_sockdata_t *) sock_core->specific_data; 202 203 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr), 204 &fsock.addr); 201 socket = (udp_sockdata_t *)sock_core->specific_data; 202 203 fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 205 204 fsock.port = sock_core->port; 206 205 urc = udp_uc_set_local(socket->assoc, &fsock); … … 270 269 } 271 270 272 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr), 273 &fsock.addr); 271 fsock.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 274 272 fsock.port = uint16_t_be2host(addr->sin_port); 275 273 fsock_ptr = &fsock; … … 316 314 fibril_mutex_lock(&socket->lock); 317 315 318 if ( inet_addr_is_any(&socket->assoc->ident.local.addr)) {316 if (socket->assoc->ident.local.addr.ipv4 == UDP_IPV4_ANY) { 319 317 /* Determine local IP address */ 320 inet_addr_t loc_addr; 321 inet_addr_t rem_addr; 322 323 rem_addr = fsock_ptr ? fsock.addr : 324 socket->assoc->ident.foreign.addr; 318 inet_addr_t loc_addr, rem_addr; 319 320 rem_addr.ipv4 = fsock_ptr ? fsock.addr.ipv4 : 321 socket->assoc->ident.foreign.addr.ipv4; 325 322 326 323 int rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr); … … 333 330 } 334 331 335 socket->assoc->ident.local.addr = loc_addr; 332 socket->assoc->ident.local.addr.ipv4 = loc_addr.ipv4; 333 log_msg(LOG_DEFAULT, LVL_DEBUG, "Local IP address is %x", 334 socket->assoc->ident.local.addr.ipv4); 336 335 } 337 336 … … 411 410 size_t data_len; 412 411 udp_error_t urc; 413 udp_sock_t *rsock;412 udp_sock_t rsock; 414 413 struct sockaddr_in addr; 415 414 int rc; … … 447 446 log_msg(LOG_DEFAULT, LVL_DEBUG, "Got data in sock recv_buffer"); 448 447 449 rsock = &socket->recv_fsock;448 rsock = socket->recv_fsock; 450 449 data_len = socket->recv_buffer_used; 451 450 urc = socket->recv_error; … … 477 476 478 477 if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) { 479 /* Fill address */ 480 uint32_t rsock_addr; 481 int rc = inet_addr_pack(&rsock->addr, &rsock_addr); 482 if (rc != EOK) { 483 fibril_mutex_unlock(&socket->recv_buffer_lock); 484 fibril_mutex_unlock(&socket->lock); 485 async_answer_0(callid, rc); 486 return; 487 } 488 478 /* Fill addr */ 489 479 addr.sin_family = AF_INET; 490 addr.sin_addr.s_addr = host2uint32_t_be(rsock _addr);491 addr.sin_port = host2uint16_t_be(rsock ->port);480 addr.sin_addr.s_addr = host2uint32_t_be(rsock.addr.ipv4); 481 addr.sin_port = host2uint16_t_be(rsock.port); 492 482 493 483 log_msg(LOG_DEFAULT, LVL_DEBUG, "addr read receive"); … … 547 537 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close()"); 548 538 int socket_id = SOCKET_GET_SOCKET_ID(call); 549 550 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - find core"); 539 551 540 socket_core_t *sock_core = 552 541 socket_cores_find(&client->sockets, socket_id); 553 542 if (sock_core == NULL) { 554 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - core not found");555 543 async_answer_0(callid, ENOTSOCK); 556 544 return; 557 545 } 558 559 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - spec data"); 546 560 547 udp_sockdata_t *socket = 561 548 (udp_sockdata_t *) sock_core->specific_data; 562 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket");563 549 fibril_mutex_lock(&socket->lock); 564 565 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket buffer"); 566 fibril_mutex_lock(&socket->recv_buffer_lock); 567 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL"); 568 socket->sock_core = NULL; 569 fibril_mutex_unlock(&socket->recv_buffer_lock); 570 571 udp_uc_reset(socket->assoc); 572 550 573 551 int rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock, 574 552 udp_free_sock_data); 575 553 if (rc != EOK) { 576 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - socket_destroy failed");577 554 fibril_mutex_unlock(&socket->lock); 578 555 async_answer_0(callid, rc); 579 556 return; 580 557 } 581 582 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv"); 583 fibril_condvar_broadcast(&socket->recv_buffer_cv); 584 558 585 559 fibril_mutex_unlock(&socket->lock); 586 560 async_answer_0(callid, EOK); … … 608 582 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril()"); 609 583 610 fibril_mutex_lock(&sock->recv_buffer_lock);611 612 584 while (true) { 613 585 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()"); 614 while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) { 586 fibril_mutex_lock(&sock->recv_buffer_lock); 587 while (sock->recv_buffer_used != 0) { 615 588 fibril_condvar_wait(&sock->recv_buffer_cv, 616 589 &sock->recv_buffer_lock); 617 590 } 618 619 fibril_mutex_unlock(&sock->recv_buffer_lock); 620 591 621 592 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] call udp_uc_receive()"); 622 593 urc = udp_uc_receive(sock->assoc, sock->recv_buffer, 623 594 UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock); 624 fibril_mutex_lock(&sock->recv_buffer_lock);625 595 sock->recv_error = urc; 626 627 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] udp_uc_receive -> %d", urc); 628 629 if (sock->sock_core != NULL) 630 udp_sock_notify_data(sock->sock_core); 631 596 597 udp_sock_notify_data(sock->sock_core); 598 632 599 if (urc != UDP_EOK) { 633 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");634 600 fibril_condvar_broadcast(&sock->recv_buffer_cv); 635 break; 636 } 637 601 fibril_mutex_unlock(&sock->recv_buffer_lock); 602 break; 603 } 604 638 605 log_msg(LOG_DEFAULT, LVL_DEBUG, "[] got data - broadcast recv_buffer_cv"); 639 606 640 607 sock->recv_buffer_used = rcvd; 608 fibril_mutex_unlock(&sock->recv_buffer_lock); 641 609 fibril_condvar_broadcast(&sock->recv_buffer_cv); 642 610 } 643 611 644 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() exited loop");645 fibril_mutex_unlock(&sock->recv_buffer_lock);646 612 udp_uc_destroy(sock->assoc); 647 648 log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() terminated");649 613 650 614 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.