|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Max Khon 2:5000/79.666 29 Nov 2001 01:20:52 To : Sergey V. Artjushkin Subject : get remote ip from accept(2) ? -------------------------------------------------------------------------------- 28 Nov 01 19:24, Sergey V. Artjushkin wrote to All: SVA> Есть сервер, написанный на Си, слушает определенный порт. SVA> После того как к нему цепляется какой-нибудь клиент, не могу из SVA> accept(2) вытащить ip этого клиента. SVA> ------------------------------- SVA> /* set up the listening tcp socket*/ SVA> if ( (l_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) SVA> { log_error("socket (tcp) error"); exit(0); } SVA> memset(&l_servaddr,0,sizeof(l_servaddr)); SVA> l_servaddr.sin_family = AF_INET; SVA> l_servaddr.sin_addr.s_addr = htonl(INADDR_ANY); SVA> l_servaddr.sin_port = htons(c_tcpport); SVA> if ( bind(l_fd,(struct sockaddr *) &l_servaddr, sizeof(l_servaddr)) SVA> < 0) SVA> { log_error ("bind TCP error"); exit(0); } SVA> if ( listen(l_fd, 32) < 0) SVA> { log_error("listen error"); exit(0); } SVA> if ( (l_connfd = accept(l_fd,(struct sockaddr *) l_cliaddr, SVA> &l_addrlen)) SVA> < 0) SVA> { log_error("accept error"); exit(0); } SVA> ---------------------------------------- SVA> Проблема в том, что (struct sockaddr *) l_cliaddr после успешного SVA> выполнения accept, равен NULL. Хотя по докам должен быть совсем не SVA> NULL, а структура с адресом клиента. как объявлен l_cliaddr? сдается мне что ты его объявил как struct sockaddr_in *l_cliaddr; а надо struct sockaddr_in l_cliaddr; /fjoe --- Msged/BSD TE 06 (pre) * Origin: the number of the beast is vi vi vi (2:5000/79.666) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/40593c057a31.html, оценка из 5, голосов 10
|