代码拉取完成,页面将自动刷新
同步操作将从 liexusong/bolt 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <stdlib.h>
#ifndef WIN32
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#else
#define FD_SETSIZE 1024
#include <winsock2.h>
#include<ws2tcpip.h>
#define bzero(a, b) memset(a, 0, b)
#endif
#include <fcntl.h>
#include <sys/types.h>
/**************************
* set fd to non-blocking *
**************************/
#ifndef WIN32
int bolt_set_nonblock(int fd)
{
int flags;
if ((flags = fcntl(fd, F_GETFL, 0)) == -1 ||
fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1)
{
return -1;
}
return 0;
}
#else
int bolt_set_nonblock(int fd)
{
int flag = 1;
ioctlsocket(fd, FIONBIO, (unsigned long *) &flag);
return 0;
}
#endif
/************************
* create listen socket *
************************/
int bolt_listen_socket(char *addr, short port, int nonblock)
{
int sock;
int flags;
struct linger ln = {0, 0};
struct sockaddr_in si;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
return -1;
}
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &flags, sizeof(flags));
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &flags, sizeof(flags));
setsockopt(sock, SOL_SOCKET, SO_LINGER, &ln, sizeof(ln));
#if !defined(TCP_NOPUSH) && defined(TCP_NODELAY)
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flags, sizeof(flags));
#endif
if (nonblock && bolt_set_nonblock(sock) == -1) {
goto err;
}
si.sin_family = AF_INET;
si.sin_port = htons(port);
si.sin_addr.s_addr = htonl(inet_addr(addr));
if (bind(sock, (struct sockaddr *)&si, sizeof(si)) == -1) {
goto err;
}
if (listen(sock, 1024) == -1) {
goto err;
}
return sock;
err:
close(sock);
return -1;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。