Добрый день!
Хочу получить в системе свободный порт и слушать его. Вроде все делаю правильно, но не работает зараза. Сам искал ответ - не нашел. Никаких ошибок функции не возвращают, все вроде в порядке. Пытаюсь телнетом законеститься на порт который система мне дала - не получается. Вроде как стучусь на порт который ниче не слушает. Если ставлю любой, от балды порт - все ок.
Что я делаю непралильно?
Компилил \ запускал под FreeBSD.
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <unistd.h>
int main() { int s, t, len; struct sockaddr_in sa, sa1;
s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) return -1; memset((char*)&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = htons(0); // Система должна выделить порт выше 1024 sa.sin_addr.s_addr = INADDR_ANY; len = sizeof(sa); if (bind(s, (struct sockaddr *)&sa, sizeof(sa)) < 0) { printf("BIND ERROR\n"); return -1; } if (getsockname(s, (struct sockaddr *)&sa, (socklen_t *)&len) < 0) { printf("GETSOCKNAME\n"); return -1; } printf("port:%d\n", sa.sin_port); if (listen(s, SOMAXCONN) < 0) { printf("LISTEN\n"); return -1; } t = accept(s, (struct sockaddr *) &sa1, (socklen_t *)&len); close(s); if (t < 0) { printf("ACCEPT\n"); return -1; } close(t); }