[英]C Socket programming on windows errors on listen but no errno
我已經用其他語言完成了套接字編程,但從未處理過直接用C語言進行編程的事情。 我正在嘗試設置一個簡單的服務器來偵聽Windows下的8080端口。 我正在使用mingw隨附的gcc來編譯代碼。
#include <stdio.h>
#include <string.h>
#include <WinSock2.h>
#include <stdint.h>
#include <time.h>
int main(void) {
int s;
int len;
char buffer[1025];
struct sockaddr_in servAddr;
struct sockaddr_in clntAddr;
int clntAddrLen; //length of client socket addre
//Build local (server) socket add
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(8080);
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
//create socket
if((s=socket(AF_INET, SOCK_STREAM, 0) %lt; 0 )){
perror("Error: Socket Failed!");
printf("%d\n", errno);
exit(1);
}
//bind socket to local address and port
if((bind(s,(struct sockaddr*)&servAddr, sizeof(servAddr)) %lt; 0))
{
perror("Error:bind failed!");
printf("%d\n", errno);
exit(1);
}
for(;;)
{
len = recvfrom(s,buffer, sizeof(buffer),0,(struct sockaddr*)&clntAddr, &clntAddrLen);
//send string
sendto(s, buffer, len, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
}
}
當我運行代碼時,它會錯誤地綁定,但是沒有錯誤。 該代碼是從該線程中獲取並稍作修改的: Windows C套接字編程
但是沒有錯誤代碼。 輸出顯示沒有錯誤。 它在綁定時失敗,我不確定為什么。 我一直在拼湊一些不同的資料。 我實際上只是想要一些可以在Windows上的C語言中進行hello world / 3方式握手的東西。
提前致謝。
由於運算符優先級,這是不正確的:
if((s=socket(AF_INET, SOCK_STREAM, 0) < 0 )){
因為<
優先級高於=
。 這意味着碼將分配1
或0
到s
取決於結果socket(AF_INET, SOCK_STREAM, 0) < 0
改成:
if((s=socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
使用WSAGetLastError()
獲取失敗原因,而不是errno
。 從MSDN bind()
參考頁:
如果沒有錯誤發生,則綁定返回零。 否則,它將返回SOCKET_ERROR, 並且可以通過調用WSAGetLastError來檢索特定的錯誤代碼。
在Windows上,必須在調用任何套接字函數之前調用WSAStartup()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.