Пример #1
0
	int Acceptor::accept(struct sockaddr_in* addr)
	{
		socklen_t addrlen = static_cast<socklen_t>(sizeof *addr);

#if VALGRIND
		int connfd = accept(m_sockfd, sockaddr_cast(addr), &addrlen);
		Socket::setNonBlock(connfd);
		Socket::setCloseExec(connfd);
#else
		int connfd = accept4(m_sockfd, (struct sockaddr*)(addr), &addrlen, SOCK_NONBLOCK | SOCK_CLOEXEC);
#endif
		if (connfd < 0)
		{
			int err = errno;
			if (err == EMFILE || err == ENFILE)
			{
				ERROR("accept error %s", strerror(err));
				close(m_dummyFd);
				connfd = ::accept(m_sockfd, nullptr, nullptr);
				close(connfd);

				m_dummyFd = createDummyFd();
			}
			return -1;
		}
		else
		{
			INFO("onAccept %d", connfd);

			//设置TCP缓冲数据立即发送
			Socket::setNoDelay(connfd, true);

			return connfd;
		}
	}
Пример #2
0
struct sockaddr_in SocketUtil::getPeerAddr(ZL_SOCKET sockfd)
{
    struct sockaddr_in peeraddr;
    ::memset(&peeraddr, 0, sizeof(peeraddr));
    socklen_t addrlen = static_cast<socklen_t>(sizeof peeraddr);
    if (::getpeername(sockfd, sockaddr_cast(&peeraddr), &addrlen) < 0)
    {
        printf("sockets::getPeerAddr");
    }
    return peeraddr;
}
Пример #3
0
struct sockaddr_in SocketUtil::getLocalAddr(ZL_SOCKET sockfd)
{
    struct sockaddr_in localaddr;
    ::memset(&localaddr, 0, sizeof(localaddr));
    socklen_t addrlen = static_cast<socklen_t>(sizeof(localaddr));
    if (::getsockname(sockfd, sockaddr_cast(&localaddr), &addrlen) < 0)
    {
        printf("sockets::getLocalAddr");
    }
    return localaddr;
}
Пример #4
0
int socks::connect(int sockfd, const struct sockaddr_in &addr)
{
    int conn_fd;

    conn_fd = ::connect(sockfd, sockaddr_cast(&addr), static_cast<socklen_t>(sizeof(addr)));
    if(conn_fd < 0)
    {
        fprintf(stderr, "connect error");
    }

    return conn_fd;
}
Пример #5
0
int socks::bind(int sockfd, const struct sockaddr_in &addr)
{
    int ret;

    ret = ::bind(sockfd, sockaddr_cast(&addr), static_cast<socklen_t>(sizeof(addr)));
    if(ret < 0)
    {
        fprintf(stderr, "bind error");
    }
  
    return ret;
}
Пример #6
0
int socks::accept(int sockfd, struct sockaddr_in *addr)
{
    socklen_t addrlen = static_cast<socklen_t>(sizeof(*addr));
    int conn_fd;

    conn_fd = ::accept(sockfd, sockaddr_cast(addr), &addrlen);
    if(conn_fd < 0)
    {
        fprintf(stderr, "accpet error");
        return conn_fd;
    }

    set_nonblock(conn_fd);
	
    return conn_fd;
}