• 請在 lilina.csie.ncnu.edu.tw 的個人目錄下先建立 up8 的子目錄. (注意大小寫). 在此目錄內置入這次作業所需檔案
    若你在自己電腦上寫作業, 請在上傳後測試一遍, 程式可否執行與是否正確 由 lilina 決定.
  • 作業所需檔案為:
    • Makefile (請參關 make 之相關文件)
    • README
    • 其它 .....
  • 作業說明:
    • 此作業為 client-server 中的 server 部分. client 的部分各位不用寫, 直接用 example 即可. server 的部分有二大重點, 一為用 thread 來實作 concurrent server, 另一為 thread pool 的管理. Server 的 main thread 大略如下:
      (管理 thread pool 及印出的 code 放在何處可自行決定, 此處只是一種可能方案).
               create thread pool 
               create listening socket
               loop
                  thread pool maintenance: 
                     if free theads over upper-limit, killing some
                     if free thread down lower-limit, adding some
                  newsocket = accept(.....)
                  find a free thread
                  handle newsocket to this thread for processing
                  print the usage of thread pool 
               forever 
           
      每個 thread 之流程大致如下:
              loop 
                wait for socket
                while not EOF
                  reading from socket
                  writing to socket
                close socket
              forever
           
    • 此作業中的 client 及 server 所作的事情以 echo 即可.
    • 此作業在測試時, client 及 server 可在同一台, client 用的 localhost 的 ip 為 127.0.0.1.
    • server 所 bind 的 port 不能小於 1024, 多少自己選, 只要 client 及 server 一樣, 就可以連得上.
      注意: server 結束後, 所 bind 的 port 可能不會馬上釋放, 所以程式中的 port 最好是由 argv[] 讀取. 不要固定.
    • 範例程式請由 Richard Stevens 中的 網頁 中抓取. 在 lilina 解開可用 ``tar zxf unpv12e.tar.gz''.
  • 關於 Makefile 的要求:
    最少要有二個 target:
    default target: 產生所有的執行檔.
    clean: 清除所有的執行檔, *.o 及空檔等, 將目錄回復到只有 source 的狀態.
  • 關於 README 的要求:
    說明你的執行檔名字, 如何執行, 如何測試等.
  • Due day, 2004/06/02 00:05am