-1
我正在使用TCP在互联网域中编写一个简单的服务器。我有创建套接字的工作代码,将它绑定到服务器的IP地址并监听连接。 我想使用accept()系统调用来接受连接。我已包含accept的手册页(http://www.linuxhowtos.org/data/6/accept.txt)中列出的标题。但是我的IDE说它不知道accept()是什么。 这里是我的代码:如何接受在OS X上运行的简单TCP服务器中的套接字连接?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "tcp_server.h"
void error(char* msg)
{
perror(msg);
exit(1);
}
tcp_server::tcp_server(int portno)
{
sockfd_ = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd_ < 0)
{
error("ERROR opening socket on server.");
}
bzero((char *) &serv_addr_, sizeof(serv_addr_));
serv_addr_.sin_family = AF_INET;
serv_addr_.sin_port = htons(portno);
serv_addr_.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd_, (struct sockaddr *) &serv_addr_, sizeof(serv_addr_)) < 0)
{
error("ERROR on binding socket to server address.");
}
listen(sockfd_, 5);
clilen_ = sizeof(cli_addr_);
newsockfd_ = accept(sockfd_, (struct sockaddr *) &cli_addr_, &clilen_);
}
我调用accept()在上面贴的最后一行。是不是接受()在OS X下可用?我该如何做到这一点?
这里是 “tcp_server.h”:
#pragma once
class tcp_server
{
public:
tcp_server(int portno);
~tcp_server();
void set_cli_addr();
private:
int sockfd_, newsockfd_, portno_, clilen_, n_;
char buffer_[256];
struct sockaddr_in serv_addr_, cli_addr_;
};
我收到以下错误,当我手动编译tcp_server.cpp:
tcp_server.cpp:53:18: error: no matching function for call to 'accept'
newsockfd_ = accept(sockfd_, (struct sockaddr *) &cli_addr_, &clilen_);
^~~~~~
/usr/include/sys/socket.h:681:5: note: candidate function not viable: no known conversion from 'int *' to 'socklen_t *' (aka 'unsigned int *') for 3rd argument
int accept(int, struct sockaddr * __restrict, socklen_t * __restrict)
'接受()'可用,并且有合适的头文件包括:('在')。你遇到了什么错误?你有没有试过从命令行编译它?我试着编译你的代码,但是我没有头文件'tcp_server.h'。 –
嗯,['accept'](http://www.manpages.info/macosx/accept.2.html)应该_OSX_下是可用的。你没有一个叫做“accept”的变量吗?什么是完整的错误信息? – CristiFati
_the compiler_说什么? – ForceBru