重新写了个宏
(define-macro (net-receive_blank int_socket sym-buffer max-bytes wait-string)
(letex (int_socket (eval int_socket)
sym-buffer sym-buffer
max-bytes max-bytes
)
(if (and (net-receive int_socket sym-buffer max-bytes) (= " " sym-buffer))
(net-receive int_socket sym-buffer max-bytes)
)
)
)
然后
(net-confirm-request)
(net-receive socket last-read 256)
changeto:
(net-confirm-request)
(net-receive_blank socket last-read 256)
同理
(net-confirm-request)
(net-receive_blank socket status 256)
changeto:
(net-confirm-request)
(net-receive_blank socket status 256)
ps:
真想吐槽, 这库有点不规整. 刚开始看不觉得, 改着改着我蛋疼了. 可能是作者只把这个当作一个临时的工具来用的.
就是send command 然后检索下信息.
代码这东西还是有风格的. 协议相关感觉必须清晰严谨些.
2012-08-29 14:35:13
修复了三个地方
具体代码看
http://code.google.com/p/winger-newlisp-toy/source/browse/modules/pop3.lsp;func get-new-mail
(get-messages (++ (first status)) (nth 2 status) mail-dir);winger'fix1 "messages are counted from 1"
;winger'fix2 bypass " " of "+OK "
;call it after (net-confirm-request) when you want get "xxoo" from "+OK xxoo"
(define-macro (net-receive_blank int_socket sym-buffer max-bytes wait-string)
(letex (int_socket (eval int_socket)
sym-buffer sym-buffer
max-bytes max-bytes
)
(if (and (net-receive int_socket sym-buffer max-bytes) (= " " sym-buffer))
(net-receive int_socket sym-buffer max-bytes)
)
)
)
;func get-message-id
'iend (-- (find "@|;|\n|\r| |\t" (slice message ipos) 1)));winger'fix3 delete char '>'