易截截图软件、单文件、免安装、纯绿色、仅160KB

Unix(Linux) C++ 下支持timeout的connect()的实现例子

java 的connect有timeout这个功能,C++的connect反而没有? 网查得到了两个实现的版本如下:
支持timeout的connect() / Connect with timeout
Code:
 void connect_w_to(void) {
int res;
struct sockaddr_in addr;
long arg;
fd_set myset;
struct timeval tv;
int valopt;
socklen_t lon;
// Create socket
soc = socket(AF_INET, SOCK_STREAM, 0);
if (soc < 0) {
fprintf(stderr, "Error creating socket (%d %s)\n", errno, strerror(errno));
exit(0);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(2000);
addr.sin_addr.s_addr = inet_addr("192.168.0.1");
// Set non-blocking
if( (arg = fcntl(soc, F_GETFL, NULL)) < 0) {
fprintf(stderr, "Error fcntl(..., F_GETFL) (%s)\n", strerror(errno));
exit(0);
}
arg |= O_NONBLOCK;
if( fcntl(soc, F_SETFL, arg) < 0) {
fprintf(stderr, "Error fcntl(..., F_SETFL) (%s)\n", strerror(errno));
exit(0);
}
// Trying to connect with timeout
res = connect(soc, (struct sockaddr *)&addr, sizeof(addr));
if (res < 0) {
if (errno == EINPROGRESS) {
fprintf(stderr, "EINPROGRESS in connect() - selecting\n");
do {
tv.tv_sec = 5 //overtime;
tv.tv_usec = 0;
FD_ZERO(&myset);
FD_SET(soc, &myset);
res = select(soc+1, NULL, &myset, NULL, &tv);
if (res < 0 && errno != EINTR) {
fprintf(stderr, "Error connecting %d - %s\n", errno, strerror(errno));
exit(0);
}
else if (res > 0) {
// Socket selected for write
lon = sizeof(int);
if (getsockopt(soc, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon) < 0) {
fprintf(stderr, "Error in getsockopt() %d - %s\n", errno, strerror(errno));
exit(0);
}
// Check the value returned...


相关文档:

linux 0.11 内核学习 buffer.c


/*
 * buffer.c 程序用于对高速缓冲区(池)进行操作和管理。高速缓冲
 * 区位于内核代码和主内存区之间。
 *
 *  |---|---|------------------|---------------------|-------------------|
 *  |   |   |    *   *    *    | &nbs ......

linux设置 让oracle10g自启动


在/etc/rc.d/init.d/ 创建oracle10g文件
touch oracle10g
chmod a+x oracle10g
[root@test~]# vi /etc/rc.d/init.d/oracle10g
#!/bin/bash
#chkconfig:345 51 49
#description:starts the oracle database deamons
#
ORACLE_HOME=/oracle/product/10.2.0/db_1
ORACLE_OWNER=oracle
case "$1" in
start)
echo ......

linux 常用网络工具

1,网络整体流量查看
  ifconfig -s
  cat /proc/net/dev
  sar -n DEV/EDEV interval(时间隔) count(次数)
  nload -m [-d interface]
2,详细查看网络流量,比如查看某一个ip/port,某一个协议
  iptraf,文本窗口界面
  ntop,web网页界面 ......

Linux Java环境配置安装

一、安装JDK
安装包名为:jdk-1_5_0_18-linux-i586.rpm.bin
安装步骤:
1. 以root身份登录Linux操作系统
2. 将jdk-1_5_0_18-linux-i586.rpm.bin安装包上传到/tmp目录下, 检测确保jdk-1_5_0_18-linux-i586.rpm.bin有可执行权限;
如果jdk-1_5_0_18-linux-i586.rpm.bin没有可执行权限,可使用一下命令添加
#c ......

Linux上构筑iPhone OS3.1.2开发环境之编译HELLO WORLD

终于到了编译范例的时候了,范例在APPS目录里,好兴奋呀。。。
开始编译:
zhaowei@zhaowei-ubuntu:~/toolchain/apps/HelloToolchain$ make
arm-apple-darwin9-gcc -lobjc -bind_at_load -framework Foundation -framework CoreFoundation -framework UIKit -w -o HelloToolchain HelloToolchain.o
ld: library not fou ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号