-(defmethod format-address ((address tcp-address))
- (with-slots (host port) address
- (format nil "~A:~D" (if host (format-address host) "*") port)))
-
-(defun inet-resolve-colon-port (string)
- (let ((colon (position #\: string)))
- (if (null colon)
- (error "No colon in TCP address"))
- (if (find #\: string :start (1+ colon))
- (error "More than one colon in TCP address"))
- (let ((port (parse-integer (subseq string (1+ colon))))
- (host (let ((host-part (subseq string 0 colon)))
- (if (equal host-part "*")
- nil
- (resolve-address host-part)))))
- (if (not (typep host '(or null inet-host-address)))
- (error "Must have an internet address for TCP connections"))
- (values host port))))
-
-(defun resolve-tcp-colon-port (address)
- (multiple-value-bind (host port)
- (inet-resolve-colon-port address)
- (make-instance 'tcp-address :host host :port port)))
-
-(define-parseable-address 'tcp-service #'resolve-tcp-colon-port)
-
-(export '(tcp-address resolve-tcp-colon-port))
+(defun tcp-address-for (host-address port)
+ (check-type port (unsigned-byte 16))
+ (etypecase host-address
+ (ipv4-address (make-instance 'tcp4-address :host-address host-address :port port))
+ (ipv6-address (make-instance 'tcp6-address :host-address host-address :port port))))
+
+(export '(tcp-address tcp4-address tcp6-address tcp-address-for))