覺得找一個(gè)好用的C/C++ socket庫很難。直接寫API總是很痛苦的,,繁瑣易錯(cuò)。w3c的libwww已經(jīng)停止開發(fā),;一些大的庫,,比如GNU的Common C++和wxWidgets等都有socket類,但不是很專,,并不好用,;ACE值得一學(xué),不過實(shí)在是復(fù)雜,,有些情況下用起來真可怕,。以前看過一陣libcurl,也不記得是哪位師兄推薦的了(this?),,正好昨天跟康總討論這個(gè)到深夜,,干脆這次慢慢來玩玩,,測一下在Windows和Mac OS X下的表現(xiàn)如何。
libcurl移植性很好,,幾乎所有流行的操作系統(tǒng)都有移植,。它應(yīng)該說是相對高層的庫,不直接操縱socket,。按它的介紹,,libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more!
我的印象是libcurl主要支持兩套操作API,同步和異步的,。異步的估計(jì)是用select來做的多路分離,,不過還沒仔細(xì)看源代碼,不敢確定,。libcurl有各種語言的binding,不過我還是最喜歡C的,,它本身也是基于C的,,所以以后也只討論C版本的libcurl。
以前我在Mac OS X和Red Hat 9下build過,,沒有任何問題,。不過我不記得在Mac OS X下是用fink或是opendarwin做,還是直接build,,什么時(shí)候還得重新看看,。今天主要在Windows下試了試,包括cygwin和Visual C++,。簡單倒是簡單,,只是還是犯了些土鱉錯(cuò)誤折騰了好久。明天繼續(xù)把build的過程寫一下吧,。