2013의 게시물 표시

reset USB device in linux

http://www.roman10.net/how-to-reset-usb-device-in-linux/ How to Reset USB Device in Linux by   ROMAN10   on   MAY 4, 2011  ·  10 COMMENTS USB devices are anywhere nowadays, even many embedded devices replace the traditional serial devices with usb devices. However, I experienced that USB devices hang from time to time. In most cases, a manual unplug and replug will solve the issue. Actually, usb reset can simulate the unplug and replug operation. First, get the device path for your usb device. Enter the command lsusb will give you something similar as below, Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 002: ID 04b3:310c IBM Corp. Wheel Mouse Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 002: ID 0a5c:2145 Broadcom Corp. Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Use the IBM Wheel Mouse as an example, the device node

socket select usage, OOB description.

http://man7.org/linux/man-pages/man2/select_tut.2.html man7.org  > Linux >  man-pages   NAME  |  SYNOPSIS  |  DESCRIPTION  |  RETURN VALUE  |  NOTES  |  EXAMPLE  |  SEE ALSO  |  COLOPHON The Linux Programming Interface SELECT_TUT(2) Linux Programmer's Manual SELECT_TUT(2) NAME          top select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing SYNOPSIS          top /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int nfds , fd_set * readfds , fd_set * writefds , fd_set * exceptfds , struct timeval * utimeout ); void FD_CLR(int fd , fd_set * set ); int FD_ISSET(int fd , fd_set * set ); void FD_SET(int fd , fd_set * set ); void FD_ZERO(fd_set * set );

Out-Of-Band socket exception, OOB, MSG_OOB

이미지
네트워크 끊김 등의 상황 발생 시 select를 통해 값이 detect 됨. 이 때, OOB 신호가 발생한 것인데, 이를 인지하는 방법에 대한 내용임. 본 내용은 linux, unix 내용. 발췌  http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/Documents/Out_Of_Band Out-Of-Band  Out Of Band는 TCP(:12)통신에서 쓰인다. Out Of Band는 갓길을 의미하는데, TCP에서는 긴급한 데이터의 통신을 위해서 사용한다.  OOB 라고 줄여서 부른다. TCP에서는 URG필드 를 1로 설정하는 것으로 OOB데이터임을 명시한다. URG는 URGENT를 의미한다. TCP 헤더 정보는  TCP 헤더 자세히 보기  문서를 참고하기 바란다. OOB 데이터라고 해서, 다른 패킷에 우선해서 도착하거나 높은 우선순위로 재조정된다거나 하지 않는다. 왜냐하면 별도의 패킷으로 전달되지 않고, 일반 데이터에 포함되어서 전달이 되기 때문이다. TCP 헤더의 Urgent Pointer로 긴급 데이터가 시작되는 위치를 알 수 있다. OOB 데이터를 전달 받은 운영체제(:12)는 SIGURG 시그널(:12)을 발생한다. 응용 애플리케이션은 SIGURG에 대한 시그널 핸들러를 설치해서, OOB 데이터를 처리할 수 있다. OOB 데이터를 사용하기 위해서는 read(:2)함수와 write(:2)함수가 아닌 recv(:2)와 send(:2)같은 소켓 함수를 이용해야 한다. int send(int s, const void *msg, size_t len, int flags); flags를  MSG_OOB 로 설정하면 된다. 필요성  예외 처리 서버에게 보내진 요청을 취소하기 위해서 SIGNAL 처리  OOB 데이터가 도착하면 SIGURG 시그널이 발생한다. 이 시그널에 대한 시그널 핸들러를 설치함으로써, OOB

tcp socket keepalive setting

SOCKET에 대한 keep alive option 주기. tcp 영역에서 알아서 해주는데, 로직상에서 타임아웃을 걸어 끊고있다면 의미없음. OS마다 지원여부가 다르므로 확인 후 사용 필요.   int s;   int optval;   int optlen = sizeof(optval);   /* Set the option active */   optval = 1;   optlen = sizeof(optval);   if(setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (char*)&optval, optlen) < 0) {  perror("setsockopt()");  LOG(TAG, "WEBSOCKET keep alive option fail.");   }   /* Check the status again */   if(getsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (char*)&optval, &optlen) < 0) {  LOG(TAG, "WEBSOCKET keep alive option fail.");  perror("getsockopt()");   }   LOG(TAG, "WEBSOCKET KEEPALIVE is %s\n", (optval ? "ON" : "OFF"));

웹소켓 프레임 설명 ( frezi )

발췌( http://prezi.com/h3gk0t0bs3sy/websocket/# )

[HTML5] WebSocket 서버의 handshake

이미지
발췌 [HTML5] WebSocket 서버 순서도 blocking socket을 기준으로 함. 발췌 [HTML5] WebSocket 서버의 handshake WebSocket protocol 문서중 서버의 handshake에 필요한 내용을 발로 번역함. 원문:  http://www.whatwg.org/specs/web-socket-protocol/ 아래 내용은 클라이언트에서 최초 접속 후 open status 로 가기 위한 handshake 과정이다. handshake가 완료되고 open된 상태 이후에 나머지 law data 송수신은 IRC 프로토콜을 차용하든 직접 규약을 정하든, 서비스별 WebSocket 서버와 클라이언트가 정의한 subprotocol에 의한 통신을 하면 됨. 6.1 Reading the client's opening handshake 앞으로 문서에서 예제로 사용할 클라이언트 handshake 데이터는 아래 블록에 있는 데이터를 기준으로 한다. GET /echo HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: localhost:8888 Origin: http://example.com Sec-WebSocket-Key1: 3e6b263  4 17 80 Sec-WebSocket-Key2: 17  9 G`ZD9   2 2b 7X 3 /r90 WjN}|M(6 Line 1   - 첫번째 라인은 항상 'GET' + 공백문자(U+0020) 로 시작해야 하며 모든 데이터는 UTF-8 인코딩이어야 한다.   - 공백문자(U+0020)를 기준으로 토큰을 나눈다고 가정했을 때,     - 두번째 토큰인 /echo 는 resource이다. 시작은 항상 슬래쉬(/ = U+002F)이며 resource에 포함될 수 있는 문자의 범위는 U+0021 ~ U+007E 이다.     - 세번째 토큰인 HTTP/1.1 은 무시해도 좋다.     - 라인의 끝은 항상 C