gaucheノート(編集中)

TCPのポート番号を指定して、サービス名を検索する

gosh> (use gauche.net)
#
gosh> (let ((serv (sys-getservbyport 135 "tcp")))
(list (slot-ref serv 'name)
(slot-ref serv 'aliases)
(slot-ref serv 'port)
(slot-ref serv 'proto)))[Enter]
("epmap" ("loc-srv") 135 "tcp")



Windows7で実行

gosh> (define (getserv n)
(let ((serv (sys-getservbyport n "tcp")))
(list (slot-ref serv 'name)
(slot-ref serv 'aliases)
(slot-ref serv 'port)
(slot-ref serv 'proto)))
)
getserv
gosh> (getserv 135)
("epmap" ("loc-srv") 135 "tcp")
gosh> (getserv 136)
*** ERROR: object of class #> doesn't have such slot: name
Stack Trace:
_______________________________________
  0  (slot-ref serv 'name)
        At line 4 of "(stdin)"
gosh> (getserv 445)
("microsoft-ds" () 445 "tcp")



fedora15で実行

getserv定義後
gosh> (getserv 135)
("epmap" () 135 "tcp")
gosh> (getserv 136)
("profile" () 136 "tcp")
gosh> (getserv  445)
("microsoft-ds" () 445 "tcp")
gosh> (map getserv '(135 136 445))
(("epmap" () 135 "tcp") ("profile" () 136 "tcp") ("microsoft-ds" () 445 "tcp"))
gosh> (getserv 10)
*** ERROR: object of class #> doesn't have such slot: name
Stack Trace:
_______________________________________
  0  (slot-ref serv 'name)
        At line 9 of "(stdin)"
gosh> (map getserv '(10 135))
*** ERROR: object of class #> doesn't have such slot: name
Stack Trace:
_______________________________________
  0  (slot-ref serv 'name)
        At line 9 of "(stdin)"

参照したURL: http://practical-scheme.net/gauche/man/gauche-refj_87.html