728x90
반응형

책속의 전문가들이 알려준 발표를 잘하는 비법중 하나를 소개한다면, 내가 '전문가임을 내세우는것'이다.

전문가가 되는 방법은 다음과 같다.

발표 주제가 정해지면 일단 관련된 서적과 연구보고서를 읽고 요약해본다.

콘셉트가 정해지면 발표 자료를 작성하기 시작한다.

나는 발표중에도 은근히 내가 이분야에 정통하고 있음을 밝힌다.

예를 들면, '이 분야와 관련된 일을 몇년동안 해왔다' 또는 상당한 관심을 가지고 연구를 해왔다라고 하면서 전문서적이나 관련된 유명한 인물을 자연스럽게 소개하는 방식이다.

절대로 하지 않는 말도 있다. '발표가 미숙하더라도 이해해주십시오, 미처준비하지 못했습니다, 처음입니다만'

이런말들은 해서는 안될 말이다.

 

왜 그런지에 대해서는 안나와있네..

728x90
반응형
728x90
반응형

주말에 할것도 없고

뭔가 이제는 습관적으로 가는 것 같다.

공부할 때에는 어떻게 참았는지..

 

계속해서 실패를 하고 있어 다시는 가지 않을 것 같은데..

이제는 진짜 가지 않을 것 같다.

이전에는 내가 외모는 놀 수 있는데 용기가 없어서 못놀았다고 생각이 되었지만

이제는 확연히 느끼진다.

와꾸 피치컬이 나이 등등 모두가 딸린다..

 

지금은 클럽 감주들이 오래 대중화가 되어서 그런지 잘생긴 친구들도 어프로치를 잘한다.

내가 어렸을 때에는 잘생긴 친구들은 가만히 있었던거 같은데..

그렇게 잘생긴 피지컬 좋은 어린 친구들이 많아서 나는 아무것도 하지 못했다

 

하지만.. 

혹시나 다시 갈 기회가 있다면.. 흠.. 이제는 자진해서 가지 않겠지만

혹시나 친구랑 가게되었을 때를 위해 복기를 해보면..

일단 나는 테이블에 앉으면 안될 거 같다.

 

뭔가 옆테이블에 너무 신경을 많이 쓴다.

부스가 넓기도 하고 또 가끔 부킹도 해주니 그냥 팁을 주고 부스에 앉는것이 나을거같다

그런데 이제 갈일이 없다

 

어제 느낀건데 이쁜애들은 자기가 이쁜것을 안다

표정에서 벌써 도도함이 묻어난다.

 

일단 다음 코스는 *** 별밤이다

그곳을 마지막으로 유흥은 접게될것같다.

 

 

 

728x90
반응형
728x90
반응형

local virtualbox + linux => server

another linux => client

 

위 환경으로 TCP socket 통신 테스트를 하는데 server 쪽에서 accept이 안되는 문제가 있어서 삽질하다 결국 server 측의 port가 open되지 않아서 생긴문제였다. 그래서 아래와 같이 chatgpt에게 물어봐서 해결하였다.

 

$ firewall-cmd --zone=public --add-port=9000/tcp --permanent

$ firewall-cmd --reload   

 

* 확인방법

$ firewall-cmd --list-ports                                 
3306/tcp 9000/tcp

 

[DEV][ root@localhost /root ]
$ vi /etc/firewalld/zones/public.xml                     
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <port protocol="tcp" port="3306"/>
  <port protocol="tcp" port="9000"/>
</zone>

 

 

728x90
반응형
728x90
반응형

서버는 socket 함수를 호출해서 소켓을 생성하고, bind 함수로 포트에 연결한 후 listen함수로 클라이언트로부터 연결 요청을 받는다.

이때 소켓의 상태는 CLOSED에서 LISTEN이 된다. 클라이언트가 connect 함수를 호출하면 서버는 LISTEN 상태에서 SYN_RCVD 상태가 된 다음 ESTABLISHED 상태가 된다. 자료의 전송은 서버와 클라이언트 모두 ESTABLISHED 상태일 때 가능하다.

연결의 종료는 누가 먼저 종료를 시작하는가에 따라 상태가 달라지는데, 서버의 경우 클라이언트에서 먼저 종료를 시작하면 CLOSE_WAIT, LAST_ACK 상태를 거쳐 CLOSED 상태가 된다. 반대로 서버에서 먼저 종료를 시작하면 FIN_WAIT_1, FIN_WAIT_2, TIME_OUT 상태를 거쳐 CLOSED 상태가 된다.

클라이언트는 우선 socket 함수를 호출해서 소켓을 생성하고, connect 함수를 호출해서 서버와 연결하는데, SYN_SENT 상태를 거쳐 ESTABLISHED 상태가 된다. 그러면 자료의 송수신이 가능하게 된다.

 

연결준비단계

TCP는 연결형 서비스이다. 따라서 TCP로 통신하려는 두개의 호스트는 별도의 제어정보를 주고받음으로써 호스트간의 연결을 이루어낸다.

클라이언트의 응용프로그램에서 서버와 연결하기 위해 connect 함수를 호출하면 특정 제어비트를 1로 설정한 TCP 패킷을 서로 교환함으로써 이루어지는데 패킷 3개를 서로 교환하기 때문에 3-way handshaking이라고 부른다.

 

* 1단계(SYN 패킷 전송)

우선 클라이언트는 제어비트(control bit)중 SYN 비트를 1로 설정한 TCP 제어 패킷(SYN 패킷)을 서버로 전송해 연결을 시도한다.

TCP는 송수신되는 자료의 바이트 순서를 관리하는데, SYN 패킷에 기록된 일련번호와 확인번호 필드의 값으로 순서를 추척한다.

처음 SYN 패킷에는 클라이언트가 사용할 일련번호의 시작값을 일련번호 필드에 기록해서 전송한다.

즉, SYN 패킷의 일련번호 필드에는 연결후 자료를 송수신할 때 사용할 ISN이 있다.

 

* 2단계(SYN_ACK 패킷 전송)

서버는 제어비트중 SYN비트와 ACK비트를 1로 설정한 SYN_ACK 패킷을 클라이언트로 전송함으로써 클라이언트에게 SYN 패킷을 잘 받았음을 알린다. 역시 서버가 사용할 ISN을 SYN_ACK 패킷의 일련번호 필드에 기록해서 전송한다.

 

* 3단계(ACK 패킷전송)

클라이언트는 2단계의 SYN_ACK 패킷을 서버로부터 받은후 두 호스트간에 연결이 되었다는 것을 확인하고, 제어비트의 ACK 비트를 1로 설정한 TCP 제어패킷을 서버로 보낸다.

 

자료 송수신 단계

원격지로 자료를 전송할 때 응용 프로그램의 버퍼의 내용은 커널의 TCP 송신버퍼로 복사된다.

응용프로그램의 버퍼의 내용 모두가 커널의 TCP 송신버퍼에 복사될 때가지 응용프로그램은 차단된다.

TCP 송신버퍼의 크기는 옵션 SO_SNDBUF으로 지정한다.

응용프로그램의 버퍼의 크기가 크거나 송신버퍼에 비어있지 않아서 모두 복사하지 못하면 응용프로그램이 차단된다.

 

TCP 소켓옵션

#include <sys/types.h>

#include <sys/socket.h>

int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

 

s: 옵션을 읽거나 수정하려는 소켓 기술자

level: 옵션을 해석하는 커널 내 시스템 코드의 구분

optname: 소켓의 옵션을 수정할 옵션 이름

optval: 수정할 옵션의 값

optlen: 인자 optval의 메모리 크기

 

SO_KEEPALIVE 옵션

SO_KEEPALIVE 옵션은 TCP 소켓에 적용된다. 이 옵션을 1로 설정하면 일정시간(통상 2시간)동안 해당 소켓을 통해 어떤 자료도 송수신되지 않을때, 커널에서 상대방의 상태를 확인하는 패킷을 전송한다.

소켓이름 처리구분 적용 프로토콜
SO_KEEPALIVE SOL_SOCKET TCP

 

ACK 패킷으로 정상이라고 응답하는 경우 응용프로그램에는 어떠한 통보도 하지 않고 커널간의 확인만으로 상대방이 살아있음을 확인하고 마무리 한다. 상대방으로부터 아무런 응답이 없거나 RST 응답을 받으면 소켓을 자동으로 종료한다.

기본적으로 SO_KEEPALIVE 옵션은 서버측 소켓에 설정되어 상대방 시스템의 고장이나 정전, 네트워크 연결이 끊기는 등 통신이 불가능한 상황을 탐지해준다. 상대방 시스템이 고장난 경우 ETIMEOUT 오류를, 상대방 시스템까지 네트워크 연결이 불가능한 경우 EHOSTUNREACH 오류를 반환한다. 응용프로그램에서는 해당 오류에 따라 처리하면 된다. 시스템이나 네트워크 문제가 아닌 응용프로그램 문제라면 으용프로그램이 종료될 때 상대방 커널에서 FIN 패킷을 보내 연결 종료를 시작하기 때문에 응용 프로그램에서는 EOF에 대한 처리를 하면 된다.

728x90
반응형
728x90
반응형

 

#서버

1. 소켓 생성

나중에 클라이언트로부터의 연결 요청을 받을 수 있도록 socket 함수를 이용하여 네트워크 연결 장치인 소켓을 생성한다.

아래 예는 TCP용 전화기를 준비한 경우라 할 수 있다. 즉, TCP 통신이 가능한 TCP용 소켓을 생성하였다고 생각하면 된다.

int s_socket = socket(PF_INET, SOCK_STREAM, 0);

 

2. 연결 요청을 수신할 주소 설정

클라이언트로부터의 연결 요청을 받을 서버 IP주소와 포트를 설정하고 있다.

여기서 IP주소는 INADDR_ANY, 포트번호는 9000번으로 설정하고 있는데, 이는 현재 서버의 9000번 포트를 목적지로 하는 모든 연결 요청에 대해 처리하겠다는 의미이다. IP주소로 INADDR_ANY를 설정한 이유는 한 컴퓨터에 여러장의 랜카드가 장착되어 있어서 여러개의 IP 주소가 할당되고, 서버 응용프로그램은 이들 IP를 통해 들어오는 모든 연결요청을 받아 처리해야 하기에 사용한 것이다.

memset(&s_addr, 0, sizeof(s_addr));
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
s_addr.sin_family = AF_INET;
s.addr.sin_port = htons(PORT);

 

3. 소켓을 포트에 연결

1번에서 생성한 소켓을 2번에서 설정한 주소에 연결한다. 여기서는 소켓을 포트 9000번에 연결하고 있다.

if(bind(s_socket, (struct sockaddr *)&s_addr, sizeof(s_addr))==-1) {
    printf("can't bind\n");
    return -1;
}

 

4. 커널에 개통을 요청

해당 소켓으로 통신이 이루어지도록 운영체제에 개통을 요청하고 있다.

운영체제는 이 시점부터 다른 호스트에서 포트번호 9000번으로 요청하는 연결을 받아들이기 시작한다.

우리가 전화기를 전화기 콘센트에 물리적으로 연결하고서 전화국에 개통을 요청해야 외부에서 오는 전화를 받을 수 있는 것과 마찬가지 이치이다. 다시말해서 전화국 역할을 하는 운영체제에 개통을 요청하는 단계이다. 

if(listen(s_socket, 5) == -1) {
    printf("listen fail\n");
    return -1;
}

 

5. 클라이언트로부터 연결 요청을 수신
클라이언트로부터 연결 요청을 받아들이는 코드이다. 전화오기를 기다리다가 비로소 수화기를 들어받는 단계이다.

클라이언트로부터의 연결 요청을 1번에서 생성한 소켓 s_socket으로 받으면, 운영체제에서는 클라이언트와 자료를 송수신할 때 사용할 소켓 c_socket을 반환한다. 이후에는 연결소켓 c_socket을 통해 클라이언트와 자료를 송수신한다.

int len = sizeof(c_addr);
int c_socket = accept(s_socket, (struct sockaddr *)&c_addr, &len);

 

6. 클라이언트에게 서비스를 제공

int n = strlen(buffer);
write(c_socket, buffer, n);

 

#클라이언트

1. 소켓생성

서버와 통신할 소켓을 생성

c_socket = socket(PF_INET, SOCK_STREAM, 0);

 

2. 연결할 주소를 설정

연결할 서버의 주소를 구조체 변수 c_addr에 설정하고 있다. 클라이언트 프로그램에서 연결할 서버의 IP주소는 127.0.0.1 자기자신으로,

포트번호는 9000번으로 각각 설정하고 있다.

#define PORT 9000
#define IPADDR "127.0.0.1"

 

memset(&c_addr, 0, sizeof(c_addr));
c_addr.sin_addr.s_addr = inet_addr(IPADDR);
c_addr.sin_family = AF_INET;
c_addr.sin_port = htons(PORT);

 

3. 소켓을 서버에 연결

c_socket으로 변수 c_addr에 설정된 주소에 연결을 시도한다. 이와 관련해서 서버와의 연결은 커널 내부에서 3-way handshaking을 거쳐 이루어진다. 클라이언트는 클라이언트 커널에서 서버연결에 사용할 포트(예: 2345번 포트)를 결정하기 때문에 클라이언트 프로그램에서는 포트번호를 특별히 지정하지는 않는다.

if(connect(c_socket, (struct sockaddr *) &c_addr, sizeof(c_addr))==-1) {
    printf("Can not connect\n");
    close(c_socket);
    return -1;
}

728x90
반응형
728x90
반응형

7/19 장후 NFLX, TSLA

7/25 META, GOOGL

7/27 AMZN, MSFT (feat. fomc)

8/1 AMD

8/3 AAPL

8/23 NVDA

728x90
반응형
728x90
반응형

https://www.youtube.com/watch?v=2vISYUk0_3M 

 

이 문제에 대한 정부에 해결책을 나는 줄수있다.

기업에 출퇴근 유연근무제를 강제하는 것이다

자유롭게 출퇴근 시간을 정할 수 있도록 좆소기업들도 강제해야 이러한 상황이 해결될 수 있다.

그리고 이러한 정책을 마련해도 회사 눈치보여서 실행할 수 없다면

그러한 꼰대들을 마음데로 해고시킬수 있는 법안도 발의해야 한다

정책을 마련하면 뭐하냐고 

꼰대들이 회사를 다니고 있는데 말이다

제발 꼰대들좀 회사에서 제거시켜라

 

728x90
반응형
728x90
반응형

집착, 강박의 괴로움은 언제나 더 아름답고 더 좋고 더 나은 것들을 향한 욕망때문이다.

집착의 괴로움에서 벗어나는 지혜로운 길이 있다.

의존적이고 상대적인 기준을 해체하는 것이다.

판단하지 않는것이다.

당신은 당신의 존재 그 자체로 하나의 완전한 우주다.

이 사실을 늘 명심하라.

무엇도 판단하지 마라.

 

배우자나 자녀, 부모, 상사 등 누군가를 이해하려고 애쓰지마라.

득히 어떤 기대가 무너졌을 때는 있는 그대로를 허락 하는 연습이 필요하다.

긴장을 풀고 내려놓고 허락하고 알아차려라.

 

당신안에 무엇이 있는지 냉철하게 파악할 수 있는 기회다.

그러니 그 기회를 당신 삶의 좋은 행운과 기운으로 받아들여라.

이는 당신이 진정한 변화를 얻을 수 있는 절호의 기회다.

 

삶은 두가지 중 하나다.

당신이 통제할 수 있는 일이거나 그렇지 않은 일이거나 통제할 수 있으면 통제권을 쥐어라.

그렇지 않으면 내버려두라.

우리에게 필요한 삶의 기술은 관심을 쏟는 법이 아니라, 제대로 외면하는 법이다.

 

로프트를 사랑하라

한계 너머에 무엇이 있는지 아무도 알 수 없다.

그러니 언제나 끝까지 가야한다.

언제나 높은 곳을 오르고 있는 자신의 모습을 발견할 때 당신은 비로소 한계를 넘어가고 있는 중이다.


우리의 영혼을 가로막는 3가지가 있다.

첫째, 부정적인 감정에 먹이를 주는 것이다.

둘째, 미리 판단해버리고 마는 것이다.

셋째, 어린가에 기댐으로써 균형을 무너뜨리는 것이다.

이 3가지에서 벗어나고자 노력과 훈련, 이것이 삶의 전부이다.

 

0을 향해 가라

좋은 삶은 결국 무로 돌아가는 것이다.

지금부터 마음에 잔뜩 달라붙은 것들을 하나씩 내려 놓아라.

가장 가벼운 사람이 가장 빨리 정상에 오른다.

 

삶의 성공은 당신의 믿음이 얼마나 멀리까지 당신을 데려갈 수 있는지의 싸움에서 결정됩니다.

기적같은 일이나 예상을 훨씬 뛰어넘는 결과는 그것을 이루는데 필요한 무엇인가가 내면에 확실히 존재한다는 믿음을 통해 결정된다.

마음의 힘에 대한 믿음이 삶의 중요한 것들을 결정한다.

당신보다 먼저 성공하고 먼저 뭔가를 이루고 먼저 뭔가를 발견한 사람들은 늘 이렇게 답한다.

해낼 수 있다는 믿음을 잃지 않았기 때문입니다.

당신의 믿음을 의심하지 말라

 

728x90
반응형
728x90
반응형

cli.c
0.00MB
srv.c
0.00MB

 

 

TCP Keepalive HOWTO (tldp.org)

 

TCP의 경우, connection oriented protocol이지만, 송수신 중, 상대방 프로세스가 종료되는 등 정상적인 상황이 아닌 경우에는 세션의 종료여부를 감지할 수 없다. 

다시말해, LAN 케이블이 뽑힌다든지, 기타 비정상적인 종료가 있을 경우, 상대측에서 감지할 수 없다는 것이다.

 

1. TCP_KEEPIDLE

- 연결 활성화 상태를 유지하는 시간

- The time(in seconds) the connection needs to remain idle before TCP starts sending keepalive probes.

flags = 10;
setsockopt(sfd, SOL_TCP, TCP_KEEPIDLE, (void *)&flags, sizeof(flags)));

 

2. TCP_KEEPCNT

- 연결을 종료하기 전에 연결 유효성을 검사하는 횟수

- The maximum number of keepalive probes TCP should send before dropping the connection.

flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPCNT, (void *)&flags, sizeof(flags))) 

 

3. TCP_KEEPINTVL

- The time (in seconds) between individual keepalive probes.
flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPINTVL, (void *)&flags, sizeof(flags)));

 

4. SO_KEEPALIVE

flags =1;
setsockopt(rfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&flags, sizeof(flags)))

SO_KEEPALIVE 옵션은 TCP 소켓에 적용된다. 이 옵션을 1로 설정하면 일정 시간(통상 2시간)동안 해당 소켓을 통해 어떤 자료도 송수신되지 않을 때, 커널에서 상대방의 상태를 확인하는 패킷을 전송한다. 이 패킷에 대해 상대방이 정상적이면 ACK 패킷을 전송한다.

  ACK 패킷으로 정상이라고 응답하는 경우 응용 프로그램에는 어떠한 통보도 하지 않고 커널 간의 확인만으로 상대방이 살아 있음을 확인하고 마무리한다. 상대방으로부터 아무런 응답이 없거나 RST 응답을 받으면 소켓을 자동으로 종료한다.

  기본적으로 SO_KEEPALIVE 옵션은 서버측 소켓에 설정되어 상대방 시스템의 고장이나 정전, 네트워크 연결이 끊기는 등 통신이 불가능한 상황을 탐지해 준다. 상대방 시스템이 고장난 경우 ETIMEOUT 오류를, 상대방 시스템까지 네트워크 연결이 불가능한 경우 EHOSTUNREACH 오류를 반환한다. 응용 프로그램에서는 해당 오류에 따라 처리하면 된다. 시스템이나 네트워크 문제가 아닌 응용 프로그램 문제라면 응용 프로그램이 종료될 때 상대방 커널에서 FIN 패킷을 보내 연결 종료를 시작하기 때문에 응용 프로그램에서는 EOF에 대한 처리를 하면 된다.

  만약 SO_KEEPALIVE 옵션이 설정되지 않은 상태에서 상대방 시스템이 고장이거나 네트워크 연결 등에 장시간 문제가 발생하면 응용 프로그램은 아무런 상황을 모른 체로 계속해서 상대방의 응답을 기다려야 하는 상황이 발생한다.

  SO_KEEPALIVE 옵션은 자료의 송수신이 일정 시간 동안 없을 경우 응용 프로그램이 아닌 커널에서 상대방의 상태를 파악하기 위해서 패킷을 보내는 옵션임을 알았다. 그런데 여기서 일정 시간은 보통 2시간 정도이고, 커널 변수로 관리된다. 따라서 커널 변수를 수정해서 시간을 조정할 수 있지만, 이런 경우 다른 모든 소켓에도 적용되기 때문에 전체 성능에 영향을 준다. 때문에 신중을 기해야 한다.

 

 

* test 결과

tcpdump

15:12:53.465155 IP (tos 0x0, ttl 128, id 31112, offset 0, flags [DF], proto TCP (6), length 52) 
    210.217.178.185.55596 > host117.cslistener: Flags [S], cksum 0x4158 (correct), seq 1438701007, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 ==> (SYN)
15:12:53.465179 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
    host117.cslistener > 210.217.178.185.55596: Flags [S.], cksum 0x0b09 (incorrect -> 0x5897), seq 567562173, ack 1438701008, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0 ==> (SYN ACK)
15:12:53.465849 IP (tos 0x0, ttl 128, id 31113, offset 0, flags [DF], proto TCP (6), length 40)
    210.217.178.185.55596 > host117.cslistener: Flags [.], cksum 0xeb65 (correct), seq 1, ack 1, win 8212, length 0 ==> (ACK)

15:13:03.467762 IP (tos 0x0, ttl 64, id 50768, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0

TCP_KEEPIDLE defines the heartbeat frequency

This means the interval between the last data packet sent (simple ACKs are not considered data) and the first keepalive probe; after the connection is marked to need keepalive, this counter is not used any further

flags = 10; // 10 seconds
setsockopt(sfd, SOL_TCP, TCP_KEEPIDLE, (void *)&flags, sizeof(flags));

 

15:13:08.475715 IP (tos 0x0, ttl 64, id 50769, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:13.483723 IP (tos 0x0, ttl 64, id 50770, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:18.492715 IP (tos 0x0, ttl 64, id 50771, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:23.499762 IP (tos 0x0, ttl 64, id 50772, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [.], cksum 0x0afd (incorrect -> 0x0a96), seq 0, ack 1, win 229, length 0
15:13:28.507734 IP (tos 0x0, ttl 64, id 50773, offset 0, flags [DF], proto TCP (6), length 40)
    host117.cslistener > 210.217.178.185.55596: Flags [R.], cksum 0x0afd (incorrect -> 0x0a91), seq 1, ack 1, win 229, length 0

TCP_KEEPINTVL defines the heartbeat frequency when there is no answer from the other side;

TCP_KEEPCNT dictates how many unanswered heartbeat will indicate a dropped connection;

flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPCNT, (void *)&flags, sizeof(flags));
flags = 5;
setsockopt(sfd, SOL_TCP, TCP_KEEPINTVL, (void *)&flags, sizeof(flags));

 

결론: [15:13:28] read() ends

 

Holmes He

 

setsockopt, SO_KEEPALIVE and Heartbeats

There are two end purposes for sending heartbeats through a persistent connection. For a back-end application, heartbeats are generally used to detect an absent client, so as to drop a connection and

holmeshe.me

 

728x90
반응형
728x90
반응형

목이아파 병원에 왔다.

일자목 거북목 그게 뭔데 어쩌라고 하면서 살아온 댓가인가?

너무 아프다.

mri 촬영을 해야하는데 가격이 마침 25만원이란다.

실비처리로 받을수 있는지 모르겠다.

좋은 실비보험 하나 들어놓을걸..

그냥 싼걸로 아무거나 선택해서 들어놓은 실비보험이 효자노릇을 해줄지 모르겠다.

부디 목디스크가 아니길..

목디스크여도 수술까지는 가지않아야한다. 

mri찍는데 20분이나 걸린다고 한다. 처음 알았다.

어쨌든 미국이 아닌걸 감사해야하나?

어쨌든 수술만은 피하길 간절히 기도하면서 mri 촬영을 기다려본다

728x90
반응형

+ Recent posts