What if I want messages to be ordered as well. I am facing a scenario where I am sending packets from 2 TCP connection in a manner say 1 TCP connection first send a packet than 2 TCP send. I am implementing it using conditional locks
Then on server side I want packets to be received in same order why is my order changing is it because of epool?
void *send_packets(void *arg) {
int conn_id = *(int *)arg;
set_thread_affinity(conn_id );
int sock = socket(AF_INET, SOCK_STREAM, 0);
int flag = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));
int sndbuf = 8 * 1024 * 1024;
setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf));
struct sockaddr_in serv_addr = { .sin_family = AF_INET, .sin_port = htons(PORT) };
inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr);
if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Connection failed");
free(arg);
return NULL;
}
for (int i = 0; i < PACKETS; i++) {
pthread_mutex_lock(&lock);
while (current_conn != conn_id) {
pthread_cond_wait(&cond, &lock);
}
sprintf(msg, "12345678901234567890123456789012345678901TCP:%d | PACKET:%d\n", conn_id, global_packet_id++);
send(sock, msg, 60, 0);
printf("%s", msg);
current_conn = (current_conn % TCP_CONN) + 1; // Move to the next connection
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&lock);
}
close(sock);
free(arg);
return NULL;
}