Changeset 28a3e74 in mainline for uspace/lib/net/tl/socket_core.c
- Timestamp:
- 2011-04-02T09:22:46Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 250dbef, b2a081ae
- Parents:
- ea53529
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/tl/socket_core.c
rea53529 r28a3e74 91 91 int packet_id; 92 92 93 / / if bound93 /* If bound */ 94 94 if (socket->port) { 95 / / release the port95 /* Release the port */ 96 96 socket_port_release(global_sockets, socket); 97 97 } 98 98 99 / / release all received packets99 /* Release all received packets */ 100 100 while ((packet_id = dyn_fifo_pop(&socket->received)) >= 0) 101 101 pq_release_remote(packet_phone, packet_id); … … 166 166 int rc; 167 167 168 / / create a wrapper168 /* Create a wrapper */ 169 169 socket_ref = malloc(sizeof(*socket_ref)); 170 170 if (!socket_ref) … … 172 172 173 173 *socket_ref = socket; 174 / / add the wrapper174 /* Add the wrapper */ 175 175 rc = socket_port_map_add(&socket_port->map, key, key_length, 176 176 socket_ref); … … 206 206 int rc; 207 207 208 / / create a wrapper208 /* Create a wrapper */ 209 209 socket_port = malloc(sizeof(*socket_port)); 210 210 if (!socket_port) … … 221 221 goto fail; 222 222 223 / / register the incomming port223 /* Register the incoming port */ 224 224 rc = socket_ports_add(global_sockets, port, socket_port); 225 225 if (rc < 0) … … 277 277 278 278 address_in = (struct sockaddr_in *) addr; 279 / / find the socket279 /* Find the socket */ 280 280 socket = socket_cores_find(local_sockets, socket_id); 281 281 if (!socket) 282 282 return ENOTSOCK; 283 283 284 / / bind a free port?284 /* Bind a free port? */ 285 285 if (address_in->sin_port <= 0) 286 286 return socket_bind_free_port(global_sockets, socket, 287 287 free_ports_start, free_ports_end, last_used_port); 288 288 289 / / try to find the port289 /* Try to find the port */ 290 290 socket_port = socket_ports_find(global_sockets, 291 291 ntohs(address_in->sin_port)); 292 292 if (socket_port) { 293 / / already used293 /* Already used */ 294 294 return EADDRINUSE; 295 295 } 296 296 297 / / if bound297 /* If bound */ 298 298 if (socket->port) { 299 / / release the port299 /* Release the port */ 300 300 socket_port_release(global_sockets, socket); 301 301 } … … 306 306 307 307 case AF_INET6: 308 / / TODO IPv6308 /* TODO IPv6 */ 309 309 break; 310 310 } … … 333 333 int index; 334 334 335 / / from the last used one335 /* From the last used one */ 336 336 index = last_used_port; 337 337 … … 339 339 ++index; 340 340 341 / / til the range end341 /* Till the range end */ 342 342 if (index >= free_ports_end) { 343 / / start from the range beginning343 /* Start from the range beginning */ 344 344 index = free_ports_start - 1; 345 345 do { 346 346 ++index; 347 / / til the last used one347 /* Till the last used one */ 348 348 if (index >= last_used_port) { 349 / / none found349 /* None found */ 350 350 return ENOTCONN; 351 351 } 352 352 } while (socket_ports_find(global_sockets, index)); 353 353 354 / / found, break immediately354 /* Found, break immediately */ 355 355 break; 356 356 } … … 384 384 socket_id = 1; 385 385 ++count; 386 / / only this branch for last_id386 /* Only this branch for last_id */ 387 387 } else { 388 388 if (socket_id < INT_MAX) { … … 425 425 return EINVAL; 426 426 427 / / store the socket427 /* Store the socket */ 428 428 if (*socket_id <= 0) { 429 429 positive = (*socket_id == 0); … … 441 441 return ENOMEM; 442 442 443 / / initialize443 /* Initialize */ 444 444 socket->phone = app_phone; 445 445 socket->port = -1; … … 493 493 int accepted_id; 494 494 495 / / find the socket495 /* Find the socket */ 496 496 socket = socket_cores_find(local_sockets, socket_id); 497 497 if (!socket) 498 498 return ENOTSOCK; 499 499 500 / / destroy all accepted sockets500 /* Destroy all accepted sockets */ 501 501 while ((accepted_id = dyn_fifo_pop(&socket->accepted)) >= 0) 502 502 socket_destroy(packet_phone, accepted_id, local_sockets, … … 535 535 next_packet = pq_next(packet); 536 536 if (!next_packet) { 537 / / write all if only one fragment537 /* Write all if only one fragment */ 538 538 rc = data_reply(packet_get_data(packet), 539 539 packet_get_data_length(packet)); 540 540 if (rc != EOK) 541 541 return rc; 542 / / store the total length542 /* Store the total length */ 543 543 *length = packet_get_data_length(packet); 544 544 } else { 545 / / count the packet fragments545 /* Count the packet fragments */ 546 546 fragments = 1; 547 547 next_packet = pq_next(packet); … … 549 549 ++fragments; 550 550 551 / / compute and store the fragment lengths551 /* Compute and store the fragment lengths */ 552 552 lengths = (size_t *) malloc(sizeof(size_t) * fragments + 553 553 sizeof(size_t)); … … 565 565 } 566 566 567 / / write the fragment lengths567 /* Write the fragment lengths */ 568 568 rc = data_reply(lengths, sizeof(int) * (fragments + 1)); 569 569 if (rc != EOK) { … … 573 573 next_packet = packet; 574 574 575 / / write the fragments575 /* Write the fragments */ 576 576 for (index = 0; index < fragments; ++index) { 577 577 rc = data_reply(packet_get_data(next_packet), … … 584 584 } 585 585 586 / / store the total length586 /* Store the total length */ 587 587 *length = lengths[fragments]; 588 588 free(lengths); … … 636 636 return; 637 637 638 / / find ports638 /* Find ports */ 639 639 socket_port = socket_ports_find(global_sockets, socket->port); 640 640 if (socket_port) { 641 / / find the socket641 /* Find the socket */ 642 642 socket_ref = socket_port_map_find(&socket_port->map, 643 643 socket->key, socket->key_length); … … 646 646 --socket_port->count; 647 647 648 / / release if empty648 /* Release if empty */ 649 649 if (socket_port->count <= 0) { 650 / / destroy the map650 /* Destroy the map */ 651 651 socket_port_map_destroy(&socket_port->map, free); 652 / / release the port652 /* Release the port */ 653 653 socket_ports_exclude(global_sockets, 654 654 socket->port, free); 655 655 } else { 656 / / remove656 /* Remove */ 657 657 socket_port_map_exclude(&socket_port->map, 658 658 socket->key, socket->key_length, free); … … 685 685 int rc; 686 686 687 / / find ports687 /* Find ports */ 688 688 socket_port = socket_ports_find(global_sockets, port); 689 689 if (!socket_port) 690 690 return ENOENT; 691 691 692 / / add the socket692 /* Add the socket */ 693 693 rc = socket_port_add_core(socket_port, socket, key, key_length); 694 694 if (rc != EOK)
Note:
See TracChangeset
for help on using the changeset viewer.