У меня есть функция createServerSocket(). К этой функции можно обращаться несколькими потоками для создания своих сокетов.Передача указателя на SOCKADDR_IN и SOCKET в функции
Я хочу, чтобы каждый поток, чтобы передать три аргумента, socketIdentifier * sockaddr_in * и конкретный номер порта к createrServerSocket() функции, так что каждый поток имеет уникальный сокет.
Для этого я передаю функцию socketIdentifier * sockaddr_in * и специфический номер порта к createrServerSocket() в качестве указателей, так что socketIdentifier и розетка должна быть создана внутренняя резьба, доступную.
Ниже мой фрагмент кода:
VOID createServerSocket(SOCKADDR_IN *socket, SOCKET *socketIdentifier, int PORT)
{
//Socket Binding//
WSADATA wsa;
//Initialise winsock//
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
exit(EXIT_FAILURE);
}
//Create a socket//
if((*socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0)) == INVALID_SOCKET)
{
MessageBox(NULL,
"Socket not Created",
"Failure :(",
MB_ICONINFORMATION);
exit(EXIT_FAILURE);
}
//Socket Created//
//Prepare the sockaddr_in structure//
*socket.sin_family = AF_INET;
*socket.sin_addr.s_addr = INADDR_ANY;
*socket.sin_port = htons(PORT);
//Bind//
if(bind(socketIdentifier ,(struct sockaddr *)&socket , sizeof(socket)) == SOCKET_ERROR)
{
MessageBox(NULL,
"Bind Failed",
"Failure :(",
MB_ICONINFORMATION);
exit(EXIT_FAILURE);
}
//Else Bind Done//
MessageBox(NULL,
"Bind Done",
"SUCCESS :)",
MB_ICONINFORMATION);
}
Вот функция вызова:
DWORD WINAPI threadProc(LPVOID param)
{
SOCKADDR_IN socket;
SOCKET socketIdentifier;
createServerSocket(*socket,*socketIdentifier,8888); //Create a socket with a socketIdentifier and bind()ed to PORT#8888.
//Do something at this socket
Return TRUE;
}
Эти ошибки, которые я получаю:
error C2064: term does not evaluate to a function taking 3 arguments
error C2228: left of '.sin_family' must have class/struct/union error C2228: left of '.sin_addr' must have class/struct/union
error C2228: left of '.S_un' must have class/struct/union
error C2228: left of '.S_addr' must have class/struct/union error C2228: left of '.sin_port' must have class/struct/union
error C2070: ''unknown-type'': illegal sizeof operand
Line: if ((* socketIdentifier = socket (AF_INET, SO CK_DGRAM, 0)) == INVALID_SOCKET)
Ошибка: ошибка C2064: термин не вычисляется функция принимает 3 аргумента
Большое вам спасибо. Все остальные проблемы решаются за исключением линии: если ((* socketIdentifier = розетка (AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) Ошибка: ошибка C2064: термин не вычисляется функция принимает 3 аргумента – Ayse
@ AyeshaHassan Это потому, что у вас уже есть локальная переменная (аргумент) с именем «socket». Переименуйте эту переменную, и вы можете вызвать эту функцию. –
Большое вам спасибо. Задача решена :) – Ayse