Разобрался! bind вызывается каждый раз при биндинии порта. Я просто не программист, поэтмоу не сразу понял что к чему. Выложу на всякий случай исходник, который юзаю у себя:
Код: Выделить всё
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <dlfcn.h>
typedef int (* BindFn)(int s, const struct sockaddr *a, socklen_t al);
int port=10000; //сюда вписываем слушаемый порт
int bind(int s, const struct sockaddr *a, socklen_t al)
{
port++; // делаем port+1
BindFn real_bind_fn = dlsym(RTLD_NEXT, "bind");
if (a->sa_family == AF_INET)
{
struct sockaddr_in new_addr;
memcpy(&new_addr, a, sizeof(*a));
new_addr.sin_port = htons(port /* Your port here */);
return real_bind_fn(s, (const struct sockaddr *)&new_addr, al);
}
return real_bind_fn(s, a, al);
}
Идея проста как 3 пальца!:) Также знающему исходник не сложно дописать так, чтоб биндилась прога на разные порты, не отличающиеся на 1. А мне хватило и этого! Спасибо за ответы!