Всем привет! Подскажите что не так с кодом. Хочу сделать обертку для функции connect но никак не выходит правильно передать структуру sockaddr функции Connect, возвращает -1, хотя со стандарнтной(connect) функцией все нормально коннект есть. Код: Код (Text): #include <winsock2.h> #include <windows.h> #include <string.h> #include <stdio.h> #pragma comment (lib, "Ws2_32.lib") #define SA struct sockaddr int Socket(int domain, int type, int protocol) { int sock; sock = socket(domain, type, protocol); if(sock < 0) { printf("socket error...!"); return -1; } return sock; } int Connect(int s,struct sockaddr *sin, int len) { int c; c = connect(s, (SA *)&sin, len); if(c < 0) printf("connect error...!"); } int main(void) { int s; WSADATA wsd; WSAStartup(0x101, &wsd); s = Socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in sin; memset (&sin, 0, sizeof (sin)); sin.sin_family = AF_INET; sin.sin_port = htons (23); sin.sin_addr.s_addr = inet_addr("192.168.1.1"); Connect(s,(SA *)&sin, sizeof(sin)); } И еще вопрос по теме. Изучаю стивенса, в unp.h файле приведены прототипы функций, там же есть и Connect, не понятно где находятся сами функции и функции обработки ошибок?
vadak В main ты вызовом Connect(s,(SA *)&sin, sizeof(sin)); передаешь адрес структуры sin. Дальше в самой Connect опять вызываешь c = connect(s, (SA *)&sin, len). Разве нужно (SA *)&sin ? У тебя же там уже лежит адрес структуры sin.
Не надо передавать адрес указателя! Да и какой смысл тебе кастовать sockaddr* к sockaddr*? Я так понимаю, ты хотел кастовать sockaddr_in* к sockaddr* (судя по названию sin). Тогда нужно так: Код (Text): int Connect(int s,struct sockaddr_in *sin, int len) { int c; c = connect(s, (struct sockaddr*) sin, len); if(c < 0) printf("connect error...!"); }