MCPcopy Create free account
hub / github.com/SIPp/sipp / sipp_bind_socket

Function sipp_bind_socket

src/socket.cpp:1439–1492  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1437}
1438
1439int sipp_bind_socket(SIPpSocket *socket, struct sockaddr_storage *saddr, int *port)
1440{
1441 int ret;
1442 int len;
1443
1444
1445#ifdef USE_SCTP
1446 if (transport == T_SCTP && multisocket == 1 && port && *port == -1) {
1447 sockaddr_update_port(saddr, 0);
1448 }
1449#endif
1450
1451 if (socket->ss_ipv6) {
1452 len = sizeof(struct sockaddr_in6);
1453 } else {
1454 len = sizeof(struct sockaddr_in);
1455 }
1456
1457 if ((ret = ::bind(socket->ss_fd, (sockaddr *)saddr, len))) {
1458 return ret;
1459 }
1460
1461 if (!port) {
1462 return 0;
1463 }
1464
1465 if ((ret = getsockname(socket->ss_fd, (sockaddr *)saddr, (sipp_socklen_t *) &len))) {
1466 return ret;
1467 }
1468
1469 if (socket->ss_ipv6) {
1470 socket->ss_port = ntohs((short)((_RCAST(struct sockaddr_in6 *, saddr))->sin6_port));
1471 } else {
1472 socket->ss_port = ntohs((short)((_RCAST(struct sockaddr_in *, saddr))->sin_port));
1473 }
1474 *port = socket->ss_port;
1475
1476#ifdef USE_SCTP
1477 if (transport == T_SCTP) {
1478 bool isany = false;
1479 if (socket->ss_ipv6) {
1480 if (memcmp(&(_RCAST(struct sockaddr_in6 *, saddr)->sin6_addr), &in6addr_any, sizeof(in6_addr)) == 0)
1481 isany = true;
1482 } else {
1483 isany = (_RCAST(struct sockaddr_in *, saddr)->sin_addr.s_addr == INADDR_ANY);
1484 }
1485 if (!isany) {
1486 set_multihome_addr(socket, *port);
1487 }
1488 }
1489#endif
1490
1491 return 0;
1492}
1493
1494void SIPpSocket::set_bind_port(int bind_port)
1495{

Callers 4

connectMethod · 0.85
open_connectionsFunction · 0.85

Calls 2

sockaddr_update_portFunction · 0.85
set_multihome_addrFunction · 0.85

Tested by

no test coverage detected