写了一个程序,尝试在80端口监听,结果在执行bind的时候失败了。
程序是这样的:
sockaddr_in sock_addr;
memset(&sock_addr, 0, sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = host_inet_addr;
sock_addr.sin_port = htons(m_local_port); //m_local_port=80
ret = bind( m_socket_fd, (const sockaddr*)&sock_addr, sizeof(sockaddr_in));
ret是-1.
然后将m_local_port改成8080成功了。突然想起来,系统不允许用户程序在1-1024端口监听,因为他们是知名端口。
那么怎么样才可以在知名端口监听呢?显然我的机器上没有再80端口运行的程序,所以一定有办法,莫非是我的程序级别不够。
于是使用su,换成root用户,结果成功bind.
记录一下。