http://wwwi.tistory.com/tag/winsock
TCP의 서버 프로그램을 종료한 바로뒤 다시 서버를 기동하면
bind에서 에러(Address aleady in use)로 끝날 때가 있다.
TCP의 서버 프로그램을 종료하고 다시 기동시켰는데 왜 bind가 되지 않을까?
라고 생각하며 시간이 지난후 다시 기동시키면 문제업이 bind가 된다.
이 문제는 TCP 자체 사양에 의하여 일어나는 문제이다.
구체적으로는 TCP의 TIME_WAIT상태가 bind를 fail시킨다.
서버는 TCP 세션을 받은 상태에서 close하면 TIME_WAIT상태가 된다.
이때 주의해야되는 것은 TCP 서버의 TIME_WAIT가 발생하는 경우와
발생하지 않는 경우가 있다는 것이다.
TCP서버 쪽에서 close를 먼저 실행하면 TIME_WAIT상태가 발생하지만
TCP클리아언트 쪽에서는 먼저 close를 실행해도 서버 쪽에
TIME_WAIT가 발생하지 않는다.
더 구체적으로 쓴다면 클라이언트가 먼저 FIN을 송신하면 TCP서버 쪽에는
TIME_WAIT상태에 빠지지않는다.
TIME_WAIT상태는 "netstat -na" 명령을 도스창에서 쳐보면 확인할 수 있다.
TCP세션이 확립된 경우 "netstat -na"를 쳐보면 ESTABLISHED라고 표시되어진다.
TCP세션이 종료된 후 "netstat -na" 명령을 쳐보면 TIME_WAIT생태를 볼수있다.
TIME_WAIT상태는 같은 포트를 다른 프로세스가 이용하는 것을 막기 위해
TCP 규격으로 규정되어져있다.
TIME_WAIT상태의 포트와 동일한 포트를 bind하려하면 bind는 실패한다.
단 끝나버린 프로세스가 쓰고 있는 포트 번호를 바로 쓸 수 없으면 곤란함으로
TIMW_WAIT상태로 남아있는 TCP세션이 있더라도 bind할 수 있는 방법이 있다.
그 방법이 SO_REUSEADDR을 유효하게 하는 것이다.
SO_REUSEADDR를 유효하게 하는 방법은 setsockopt함수를 이용하여
소켓에 옵션을 설정할 수 있다.
#include
#include
int main()
{
WSADATA wsaData;
SOCKET sockSvr;
SOCKET sockSS;
int nlen;
struct sockaddr_in addrSockSvr;
struct sockaddr_in addrSockclt;
BOOL bValid = 1;
// 윈속 초기화
WSAStartup(MAKEWORD(2, 0), &wsaData);
// 소켓 만들기
sockSvr = socket(AF_INET, SOCK_STREAM, 0);
// 소켓 설정
addrSockSvr.sin_family = AF_INET;
addrSockSvr.sin_port = htons(333);
addrSockSvr.sin_addr.S_un.S_addr = INADDR_ANY;
// 소켓 옵션 설정
setsockopt(sockSvr, // SOCKET
SOL_SOCKET, // level
SO_REUSEADDR, // Option
(const char *)&bValid, // Option Value
sizeof(bValid)); // Option length
bind(sockSvr, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));
// TCP클라이언트로 부터 접속 요구를 대기
listen(sockSvr, 5);
while (1) {
// TCP클라이언트로 부터 접속 요구 받기\tab
nlen = sizeof(addrSockclt);
sockSS = accept(sockSvr, (struct sockaddr *)&addrSockclt, &nlen);
// 문자송신
printf("%s 로부터 접속 (포트번호:%d)\n",
inet_ntoa(addrSockclt.sin_addr), // IP어드레스
ntohs(addrSockclt.sin_port)); // 포트번호
send(sockSS, "안녕", 5, 0);
closesocket(sockSS);
}
// 윈속 종료
WSACleanup();
return 0;
}
辞書を使って日本語の文章をトークナイズします。
下は「Sen はJAVAで書かれた日本語形態素解析器です」をSenでトークナイズした例です。
- Sen を Solr に組み込むためには別途 lucene-ja も必要になります。lucene-jaはSen のラッパーとして動いて、Sen と Solr の間の橋渡しをするものです。 lucene-ja のインストールは次の記事で書く予定です。
では、れっつインストール。
ダウンロード
下からsen-1.2.2.1.zipをダウンロードして解凍する。
https://sen.dev.java.net/servlets/ProjectDocumentList?folderID=755&expandFolder=755&folderID=0
unzip sen-1.2.2.1.zipインストール
utf-8 で使うための設定
% cd sen-1.2.2.1/conf辞書のインストール
%vi sen.xml
<!-- charset>euc-jp</charset -->
<charset>utf-8</charset>
% vi sen-processor.xml
<!-- charset>euc-jp</charset -->
<charset>utf-8</charset>
% cd sen-1.2.2.1/dic
% vi dictionary.properties
//sen.charset=EUC-JP
sen.charset=utf-8
注) dic.charset=EUC-JPは変更しないこと
% cd sen-1.2.2.1/dicここでインストールされる辞書は ipadic-2.6.0 なのですが、ipadic-2.7.0が既に出ているので新し物好きな人は build.xml を修正すると幸せになれると思います。
% ant
最近はNAIST-jdicの人気も高いのでこちらをつかうのもオサレです。
インストール% mv sen-1.2.2.1/ $HOME/local環境変数の設定
動作確認
% vi ~/.cshrcbashの人は適当に読み替えてください。
setenv SEN_HOME $HOME/local/sen-1.2.2.1
setenv CLASSPATH $SEN_HOME/lib/sen.jar:$CLASSPATH
動作確認
% sh $HOME/local/sen-1.2.2.1/bin/sen.sh
適当な日本語を入れてトークナイズされればおk。
「すもももももももものうち」 がお約束です。
[Solr][Sen] 日本語形態素解析器Senを導入する その1 Senのインストール
[Solr][Sen] 日本語形態素解析器Senを導入する その2 lucene-jaのインストール
[Solr][Sen] 日本語形態素解析器Senを導入する その3 インデキシングする
[Solr][Sen] 日本語形態素解析器Senを導入する その4 再現率が高いNグラム
[Solr][Sen] 日本語形態素解析器Senを導入する その5 精度なら形態素解析
[Solr][Sen] 日本語形態素解析器Senを導入する その6 Nグラムと形態素解析には一長一短あり。目的に応じて使い分けよう
出処:http://gypark.pe.kr/wiki/Perl
일반:
- /변수
- /특수문자
- /파일
- /디렉토리
- /명령행인자
- /조건문
- /순환문
- /문자열
- /배열
- /해쉬
- /서브루틴
- /라이브러리
- /디버깅
- /모듈
- /OOP
- /외부프로그램실행
- /프로세스와IPC
- /Database
- /에러처리
펄 함수:
- /Functions
- /Pack, Unpack 함수
펄 모듈:
- /Prima 모듈
기타:
- /퍼센트인코딩 - URL에 들어간 한글 등을 인코딩
- /기타
- /알고리즘
- /SchwartzianTransform
- /Configuring - 프로그램 동작 설정, 명령행 인자, 설정 파일 처리 등
관련 링크:
- http://www.perl.com
- 펄 홈페이지 - http://perl.or.kr
- 한국 펄 사용자 모임 - http://www.perlmania.or.kr
- 펄 마니아 - http://www.softbrain.co.kr/perl
- Perl 이야기 - http://www.web-biz.pe.kr/dev/dev.pl
- 매우 유익한 Perl 강좌. - danny - http://qaos.com/sections.php?op=listarticles&secid=12

- http://tea815.com.ne.kr/Perl/

- http://www.emh.co.kr/tech.pl

- http://www.codeordie.org/doc/perldoc/perltoc.html
- 와우, perldoc 으로 나오는 내용들 중 많은 것이 번역되어 있다. - [Mastering Perl]

- [Perlmania: Perl Coding Style]

- 위 가이드라인에 언급된 대로 perltidy를 사용해서 ext2.2를 변환한 결과 :
wiki_pl_converted_by_perltidy.html
- if 문에 조건 여러개가 결합되었을 때의 처리, else 키워드가 if 와 같은 형태로 들여쓰기 된 것, 인접한 할당문들을 "="를 기준으로 정렬시킨 것 등이 재미있다.
- 위 가이드라인에 언급된 대로 perltidy를 사용해서 ext2.2를 변환한 결과 :
- [Beginning Perl - perl.org]

- [Beginning Perl - Books]
- 위키로 올라와 있음
- [Beginning Perl - Books]
- [Perl Training Australia - Course Notes]

| インデックス |
| 第1回 「SOAって何?」 | |
| ・ | はじめてのSOA |
| ・ | SOA(Service Oriented Architecture)とは? |
| ・ | SOAでいわれるところのサービスとは? |
| ・ | 最も簡単なSOAのパターン |
| ・ | 一歩進んだSOAのパターン |
| ・ | SOAの価値 |
| 第2回 「SOAに関連する技術」 | |
| ・ | Webサービス |
| ・ | BPEL(Business Process Execute Language) |
| ・ | ESB(Enterprise Service Bus) |
| 第3回 「SOAへの第一歩 - Webサービス化」 | |
| ・ | 既存の在庫照会プログラム |
| ・ | 既存プログラムをサービスとして利用しやすい形に変更する |
| ・ | サービスとして利用しやすい形にしたプログラムをWebサービス化する |
| ・ | インターフェース記述言語のWSDL |
| 第4回 「ESBのお話」 | |
| ・ | ESBとは? |
| ・ | なぜESBが必要になるのか? |
| ・ | ESBのあるべき姿 |
| 最終回 「SOA対応のIBMソフトウェア」 | |
| ・ | Webサービスを実現するソフトウェア |
| ・ | BPEL対応のソフトウェア |
| ・ | ESB対応のソフトウェア |
| ・ | 最後に |

