non block i/o를 사용하면 성능이 몇배 이상 좋아진다.하지만 구현하기가 복잡하며, 내공이 깊어야 한다. 우리가 여태 짠 클라이언트 프로그램에서는 키보드로부터(stdin) Fgets를 통해서 스트링을 읽어오며 소켓에 write를하고 서버에서 에코가 오면 소켓으로 부터 read한 뒤에 다시 모니터에 Fputs를 통해 출력하게 된다. 즉 read2번 write2번을 하게 되며 각 과정이 모두 블럭될수 있다. write가 블럭 되는 경우는 쓰려고 하는 데이터가 버퍼보다 더 큰 경우이다. 그렇기 때문에 블럭시키지 말고 파일이 readable 또는 writable 한 상태가 아니라면 -1을 리턴시키고 바로 다른일을 할수 있게끔 하는게 non blocking i/o이다. Fgets로 키보드로 입력받은것을 소..
센서 네트워크 설계에 필요한 것들. 1.사람이 들여다보고 있지 않아도 노드들끼리 알아서 동작해야 한다. (self-configuring)- 백만개의 노드에 IP 주소를 할당하기 힘들다. 따라서 알아서 주변 노드들을 찾아서 통신해야 한다. 2.In-network processing(네트워크 내에서 처리 가능하도록 프로그래밍 해야한다)- 수많은 수집된 데이터들을 원본 그대로 넘기면 아주 많은 통신량이 필요하므로, 적절히 노드들이 가공해서 전송해야 한다.- 노드들 각자가 알아서 필요한 데이터만 골라 수집하는 알고리즘을 개발 해야 한다.- 노드들이 배터리로 움직인다고 할때, 배터리를 자주 교체 해줘야 하면, unattended system이 아니다. 3.환경 적응적으로 설계 되어야 한다(Adaptive loca..
Q. 테트라에서는 제공 되나 GSM과 같은 일반 이동전화망에서는 제공되지 않는 기능 3가지 이상 A Push-to-talk기능,단말기간 직접 통신(인프라x),dispatcher(한 네트워크 내에서 누가 누구랑 통신할것이고 우선순위는 어떻게 할것인가를 결정하는 관리자 역할을 하는 노드). Q. UTRA-FDD(W-CDMA)에서의 macro-diversity에 대해 설명하고 GSM에서는 불가능하나 UTRA-FDD에서는 가능한 이유를 설명하시오 A. macro-diversity -> 한 사용자가 인접한 셀들의 기지국으로 부터 신호를 결합하거나 선택적으로 사용하는 기능.GSM에서는 기지국 마다 서로 다른 주파수를 사용했기 때문에 불가능했지만, W-CDMA는 인접셀들이 서로 같은 주파수를 사용하고, 코드만 다르기..
alarm(5);를 호출. 12번째 줄의 if문은 5초가 지났을때 실행되고 else문은 5초 이내에 데이터가 서버로부터 도착한 경우에 실행된다.데이터가 5초 이내에 정상적으로 온 경우에는 알람을 그 즉시 꺼주어야 알람이 만료되어서 시그널 핸들러가 호출되는 일을 막을수있다. 이렇게 시그널을 통해서 타임아웃을 발생 시키는 일은 아주 경험이 많은 상태가 아니고선 지양하는게 좋다. 멀티 쓰레딩 환경에서 여러가지 오류를 일으킬 수가 있다. select나 poll의 매개변수에 시간을 설정해서 타임아웃을 발생시키는게 제일 좋은 방법이다. 위의 함수는 sec이내에 원하는 데이터가 수신 되었는지를 확인하기 위한 함수이다.(select 활용) 소켓 옵션에 리시브 타이머를 설정해 놓을수있다. 소켓 종류에 상관없이 설정이 가..
I/O에 대한 타임아웃 설정하는 방식 1.시스템콜의 인자로 타임을 설정하는 방법2.sigalram을 사용하는 방법 클라이언트가 connect시스템콜을 호출했는데 서버 기계는 존재하지만 프로세스가 존재하지 않는 경우서버 커널이 리셋 메세지를 돌려줌. 클라이언트가 connect시스템콜을 호출했는데 서버 기계가 존재하지 않는 경우타임아웃 발생함. 타임아웃 재전송 타이머는 9분이 넘기 때문에 굉장히 길다.따라서 connect에 인자로 시간을 설정해서 내가 따로 타임아웃시간을 설정할 수 있다. SIGALRM 이벤트가 발생했을때 connect_alarm시스템콜을 발생 시키라고 8번줄에서 signal함수로 등록함.근데 시그널 핸들러가 리턴 될때 프로세스가 시스템콜 호출때문에 블럭 되어 있던 상태라면 그 블럭에서 -1..
/etc/resolv.conf 에 resolver configuration files이 존재한다. 이 conf 파일에 네임서버 주소가 적혀있다.(계속해서 쌓인다)resolver code는 conf파일에서 도메인이름에 대한 아이피주소가 없는 경우로컬 dns 주소를 읽어서 그 서버에게 udp요청을 한다.(tcp도가능) 이 local 네임 서버에 그 네임에 대한 아이피 주소 정보가 없으면 상위 도메인 네임 서버에게 요청 하고 거기에도 없으면 또 상위에 요청한다.한국에는 korea 전체를 커버하는 네임서버가 존재하고 각 국의 네임서버를 커버하는 네임서버가 미국 캘리포니아(dns 루트)에 위치한다고 한다. 만약에 내가 어떤 도메인을 사용하고 싶은 경우 한국 도메인 네임 서버에 등록을 해놓으면 나중에 그 정보가 루..
tcp에서는 사진1,2,3을 따로 구분하지 않고 그냥 바이트 스트림을 보낸다.사진1이 lost된 경우 그 뒤의 패킷들이 클라이언트로 도착한다 하더라도 앞에 있는것이 도착하지 않았으므로 커널의 네트워크 버퍼에 큐잉한다.처음에 TCP는 고백앤 방식을 사용해서 못 받은 패킷 뒤의 수신된 패킷들을 모두 버렸지만, 나중에 셀렉티브 애크놀로지 방식으로 바뀌어서나중에 빠진 패킷만 따로 재전송 한다. 사진2의 첫번째 패킷,3의 첫번째,1의 두번째 패킷을 받았을때 클라이언트가 첫번째 사진에 대한 첫번째 패킷에 대한 애크를 날리지 않을것이므로 서버가 다시 재전송 한다. 클라이언트가 이 패킷을 받았을때 유저 프로세스로 버퍼에서 옮겨준다.따라서 lost패킷의 재전송이 일어날때까지 나머지 패킷들은 커널 버퍼에만 있고 유저 프로..
스트림 1,2는 문제 없음. 스트림3은 1,2,3,4는 전송 됬으나 5가 오지 않고 6,7,8이 먼저온 상황5번이 오면 5,6,7,8을 스트림3에 보냄. 스트림4에 5번까지는 갔으나 6번이 와야되는데 7번이 왔음.그림이 좀 잘못 됬는데 7번이 버퍼 안에 있는게 정상이다.5번까지 스트림4로 전송 됬으니까 두번째 버퍼의 위치에 7번이 위치하고 6번이 도착하면 스트림4로 전송한다. SCTP를 사용하는 에코 서버 프로그램sctp에서는 데이터를 주고받으면서 어떤 이벤트가 발생하는지를 유저프로세스에서 알게끔 해놓았다고 했다. sctp소켓을 만들고 나서 소켓 옵션을 설정하면 된다. 또한 연결 지향형이지만 udp소켓처럼 동작한다고 했으므로, 클라이언트에 대한 정보를 담기 위해서 sctp_recvmsg의 시스템콜의 매개..
- Total
- Today
- Yesterday
- Polyfill
- computed
- Next.js
- Babel
- react
- useEffect
- server side rendering
- props
- useRef
- atomic design
- rendering scope
- Action
- state
- reducer
- await
- es6
- javascript
- reactdom
- webpack
- return type
- reflow
- storybook
- type alias
- mobx
- promise
- hydrate
- async
- design system
- react hooks
- typescript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |