|
|
|
@ -338,27 +338,22 @@ bool CQnetGateway::ReadConfig(char *cfgFile)
|
|
|
|
// Create ports
|
|
|
|
// Create ports
|
|
|
|
int CQnetGateway::open_port(const SPORTIP &pip)
|
|
|
|
int CQnetGateway::open_port(const SPORTIP &pip)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
struct sockaddr_in sin;
|
|
|
|
CSockAddress sin(af_family, pip.port, pip.ip.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
int sock = socket(PF_INET, SOCK_DGRAM, 0);
|
|
|
|
int sock = socket(af_family, SOCK_DGRAM, 0);
|
|
|
|
if (0 > sock) {
|
|
|
|
if (0 > sock) {
|
|
|
|
printf("Failed to create socket on %s:%d, errno=%d, %s\n", pip.ip.c_str(), pip.port, errno, strerror(errno));
|
|
|
|
printf("Failed to create socket on %s:%d, errno=%d, %s\n", pip.ip.c_str(), pip.port, errno, strerror(errno));
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fcntl(sock, F_SETFL, O_NONBLOCK);
|
|
|
|
fcntl(sock, F_SETFL, O_NONBLOCK);
|
|
|
|
|
|
|
|
|
|
|
|
memset(&sin, 0, sizeof(struct sockaddr_in));
|
|
|
|
|
|
|
|
sin.sin_family = AF_INET;
|
|
|
|
|
|
|
|
sin.sin_port = htons(pip.port);
|
|
|
|
|
|
|
|
sin.sin_addr.s_addr = inet_addr(pip.ip.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// int reuse = 1;
|
|
|
|
// int reuse = 1;
|
|
|
|
// if (::setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) {
|
|
|
|
// if (::setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) {
|
|
|
|
// printf("Cannot set the UDP socket (port %u) option, err: %d, %s\n", pip.port, errno, strerror(errno));
|
|
|
|
// printf("Cannot set the UDP socket (port %u) option, err: %d, %s\n", pip.port, errno, strerror(errno));
|
|
|
|
// return -1;
|
|
|
|
// return -1;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if (bind(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)) != 0) {
|
|
|
|
if (bind(sock, sin.GetPointer(), sizeof(struct sockaddr_storage)) != 0) {
|
|
|
|
printf("Failed to bind %s:%d, errno=%d, %s\n", pip.ip.c_str(), pip.port, errno, strerror(errno));
|
|
|
|
printf("Failed to bind %s:%d, errno=%d, %s\n", pip.ip.c_str(), pip.port, errno, strerror(errno));
|
|
|
|
close(sock);
|
|
|
|
close(sock);
|
|
|
|
return -1;
|
|
|
|
return -1;
|
|
|
|
|