VERBOSE (sap, TRACE, PRINTF ("free_saps\n"));
- int i;
- for (i = 0; i < MAX_SAP_NUMBER; i++) {
- if (SAP_list[i]) {
- free (SAP_list[i]);
- SAP_list[i] = NULL;
- }
+ for (int i = 0; i < MAX_SAP_NUMBER; i++) {
+ free (SAP_list[i]);
+ SAP_list[i] = NULL;
}
}
VERBOSE (sap, TRACE, PRINTF ("sap_create_and_listen\n"));
SAP_addr_t addr;
- int sap;
+ int sap = 0;
VERBOSE (sap, DEBUG, PRINTF ("SAP local addr %s\n", local_address));
- int rc = parse_url (local_address, &addr);
-
- if (rc < 0) {
+ if (parse_url (local_address, &addr) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("can't parse url\n"));
errno = EINVAL;
- return rc;
+ return -1;
}
addr.sockaddr.sin_port =
if (sap >= 0) {
int val = 1;
setsockopt (sap, SOL_SOCKET, SO_REUSEADDR, (OPT_TYPE *)&val, sizeof (val));
- rc = bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
- if (rc < 0) {
- return rc;
+ if (bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("cant bind on SAP %d\n", sap));
+ return -1;
}
if (doListen) {
- rc = listen (sap, 5);
- if (rc < 0) {
- return rc;
+ if (listen (sap, 5) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("cant listen on SAP %d\n", sap));
+ return -1;
}
}
}
if (sap >= 0) {
int val = 1;
setsockopt (sap, SOL_SOCKET, SO_REUSEADDR, (OPT_TYPE *)&val, sizeof (val));
- rc = bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
- if (rc < 0) {
- return rc;
+ if (bind (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("cant bind on SAP %d\n", sap));
}
}
break;
SAP_addr_t addr;
int sap;
- int rc = parse_url (remote_address, &addr);
- if (rc < 0) {
+ VERBOSE (sap, DEBUG, PRINTF ("SAP remote addr %s\n", remote_address));
+ if (parse_url (remote_address, &addr) < 0) {
VERBOSE (sap, ERROR, PRINTF ("can't parse url\n"));
errno = EINVAL;
- return rc;
+ return -1;
}
addr.sockaddr.sin_port =
}
SETNOBLK (sap);
- rc = connect (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr));
+ if (connect (sap, (struct sockaddr *)&addr.sockaddr, sizeof (addr.sockaddr)) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("can't connect on soket %d\n", sap));
+ return -1;
+ }
if (addr.type == SAP_tcp) {
int val = 1;
- rc = setsockopt (sap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val));
- if (rc < 0) {
- VERBOSE (sap, ERROR, PRINTF ("setsockopt/TCP_NODELAY\n"));
+ if (setsockopt (sap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val)) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("error on setsockopt/TCP_NODELAY\n"));
return -1;
}
}
assert (SAP_list[sap] == NULL);
SAP_list[sap] = (SAP_descriptor_t *) calloc (1, sizeof (SAP_descriptor_t));
assert (SAP_list[sap]);
+
if (__sync_bool_compare_and_swap (&__init, 1, 0)) {
atexit (free_saps);
}
int sockerr;
socklen_t rlen = sizeof (sockerr);
- int rc = getsockopt (sap, SOL_SOCKET, SO_ERROR, (OPT_TYPE *)&sockerr, &rlen);
- if (rc < 0) {
+ if (getsockopt (sap, SOL_SOCKET, SO_ERROR, (OPT_TYPE *)&sockerr, &rlen) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("error on getsockopt\n"));
return -1;
}
return 0;
break;
}
+
return -1;
}
int newsap = accept (sap, NULL, 0);
if (newsap < 0) {
- VERBOSE (sap, ERROR, PRINTF ("can't accept any SAP\n"));
+ VERBOSE (sap, ERROR, PRINTF ("can't accept SAP %d\n", sap));
return newsap;
}
if (newsap >= MAX_SAP_NUMBER) {
errno = ENOMEM;
return -1;
}
- assert (SAP_list[newsap] == NULL);
+ assert (SAP_list[newsap] == NULL);
SAP_list[newsap] = (SAP_descriptor_t *)calloc (1, sizeof (SAP_descriptor_t));
assert (SAP_list[newsap]);
+
if (__sync_bool_compare_and_swap (&__init, 1, 0)) {
atexit (free_saps);
}
+
SETNOBLK (newsap);
int val = 1;
- int rc = setsockopt (newsap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val));
- if (rc < 0) {
- VERBOSE (sap, ERROR, PRINTF ("setsockopt/TCP_NODELAY\n"));
+ if (setsockopt (newsap, IPPROTO_TCP, TCP_NODELAY, (OPT_TYPE *)&val, sizeof (val)) < 0) {
+ VERBOSE (sap, ERROR, PRINTF ("error on setsockopt/TCP_NODELAY\n"));
return -1;
}
if ((sap < 0) || (sap >= MAX_SAP_NUMBER)) {
return;
}
+
close (sap);
- if (SAP_list[sap]) {
- free (SAP_list[sap]);
- SAP_list[sap] = NULL;
- }
+
+ free (SAP_list[sap]);
+ SAP_list[sap] = NULL;
}
void SAP_Set_Blocking (int sap)
return -1;
}
+ VERBOSE (sap, TRACE, PRINTF ("SAP_Send writting...\n"));
+
return write (sap, data, len);
}
return -1;
}
+ VERBOSE (sap, TRACE, PRINTF ("SAP_Receive reading...\n"));
+
int rc = read (sap, buffer, maxlen);
- if ((rc < 0) && (errno != EAGAIN)) {
- rc = -1;
+ if ((rc < 0) && (errno == EAGAIN)) {
+ rc = 0;
}
return rc;
VERBOSE (sap, TRACE, PRINTF ("test_client\n"));
int count;
- unsigned char tx_data[10][8192];
+ unsigned char tx_data[10][1500];
int tx_len[10];
VERBOSE (sap, DEBUG, PRINTF ("%s started\n", remote_address));
rc = SAP_Send (sap, tx_data[count], tx_len[count]);
if (rc < 0) {
- VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx error\n", remote_address));
+ VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx error (%d/%d-%d)\n", remote_address, rc, tx_len[count], errno));
return -1;
-
}
+
if (tx_len[count] != rc) {
VERBOSE (sap, WARNING, PRINTF ("%s SAP_Send tx len error tx=%d rc=%d\n", remote_address, tx_len[count], rc));
return -1;
}
+ VERBOSE (sap, DEBUG, PRINTF ("%s SAP_Send ok (%d)\n", remote_address, tx_len[count]));
}
for (count = 0; count < 10; count++) {
exit (1);
}
- printf ("*** STARTING TEST SEQUENCE ***\n");
+ printf ("*** STARTING SERVERS ***\n");
pthread_t tcp_thread, udp_thread;
/* Give some delay to server to setup there SAP */
sleep (1);
+
+ printf ("*** STARTING TEST SEQUENCE ***\n");
pthread_t tcp_client_thread, udp_client_thread;