板凳——————————————————c++(98)

#include <sys/socket.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <assert.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/time.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include

#define BUFFER_SIZE 512
Linux C与C++ 一线开发p509
int main(int argc, char* argv[]){
int sock1 = socket(PF_INET, SOCK_STREAM, 0);
assert(sock1 >= 0);
int old_option1 = fcntl(sock1, F_GETFL);
if(0 ==(old_option1 & O_NONBLOCK))
printf(“now socket is BLOCK mode\n”);
else
printf(“now socket is NOT BLOCK mode\n”);

Linux C与C++ 一线开发p510
char ip[] = “192.168.0.188”;
int port = 13334;

struct sockaddr_in server_address;
bzero(&server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
inet_pton (AF_INET, ip, &server_address.sin_addr);
server_address.sin_port = htons(port);

int sock2 = socket(PF_INET, SOCK_STREAM, 0);
assert(sock2 >= 0);

int old_option = fcntl(sock2, F_GETFL);
printf("noblock: %d\n", old_option & O_NONBLOCK);

struct timeval tv1, tv2;
gettimeofday(&tv1, NULL);

int ret = connect (sock2, (struct sockaddr *) & server_address, sizeof(server_address));
printf("connect ret code is : %d\n", ret);
if(ret == 0){
     printf("connect ret code is : %d\n", ret);
     if( ret == 0){
          printf("call getsockname ...\n");
          struct sockaddr_in local_address;
          socklen_t length;
          int ret = getpeername(sock2, (struct sockaddr*) & local_address, &length);
          assert(ret == 0);
          char local[INET_ADDRSTRLEN];
          printf("local with ip : %s and port: %d\n",
 inet_ntop(AF_INET, &local_address.sin_addr, local, INET_ADDRSTRLEN), ntohs(local_address.sin_port));
          
          char buffer[BUFFER_SIZE];
          memset(buffer, 'a', BUFFER_SIZE);
          send(sock2, buffer, BUFFER_SIZE, 0);
     }
     else if (ret == -1){
          gettimeofday(&tv2, NULL);
          suseconds_t msec = tv2.tv_usec - tv1.tv_usec;
          time_t sec = tv2.tv_sec - tv1.tv_sec;
          printf("time used:%d.%fs\n", sec, (double)msec / 1000000 );
          
          printf("connect failed...\n");
          if(errno == EINPROGRESS){
               printf("unblock mode ret code...\n");
          }
     }
     else{
          printf("ret code is: %d\n", ret);
     }
     close (sock2);
}	
     return 0; 

}
/*
wannian07@wannian07-PC:~$ g++ -std=c++17 -o c13 c13.cpp
wannian07@wannian07-PC:~$ ./c13
now socket is BLOCK mode

noblock: 0
connect ret code is : -1

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值