调用accept()时异常

时间:2011-11-18 12:57:36

标签: c++ windows

//this is server side code snippet used for chat application 

int* sockPtr;
int result;
result=listen(sClient,10); //sClient is SOCKET that is bind to specific port for  listining incoming connection 
sockPtr = (int*)malloc(sizeof(int));        
*sockPtr= accept(sClient,(SOCKADDR*)&client_info,&addrlen); //here is the problem on sockPtr [which is integer type pointer]

但是当客户端尝试连接时,有一个例外

Unhandled exception at 0x0041ce6b in server.exe: 0xC0000005:
Access violation reading location 0x0000000.

我该怎么办?

2 个答案:

答案 0 :(得分:2)

调用accept()时,第二个参数是您提供的用于存储地址信息的缓冲区,这取决于您正在侦听的套接字的地址族。

因此,必须在调用accept()之前声明并分配第二个参数中指定的缓冲区,第三个参数应包含缓冲区的已分配大小。然后,该函数将填充缓冲区并返回由请求的信息填充的缓冲区的实际长度。

类似的东西:

struct sockaddr_in client_info;
int                client_info_length;
[...]

client_info_length = sizeof(client_info);
*sockPtr= accept(sClient,(SOCKADDR*)&client_info,&client_info_length);

struct sockaddr_in结构存储“Internet”地址系列(TCP / IP)的地址。如果您正在使用其他协议(我怀疑......),请使用适当的结构。

答案 1 :(得分:0)

Access violation reading location 0x0000000表示您获得了nullpointer访问权限。 malloc会因为内存不足而返回nullpointer,或者问题出在其他地方。我对socket编程知之甚少,但*sockPtr= accept(...)看起来很可疑。