+
+ /* Send server-side closing handshake */
+ iov[0].iov_base = (void *)buffer;
+ iov[0].iov_len = 2;
+ iov[1].iov_base = (void *)data;
+ iov[1].iov_len = length;
+ return websock_send_v(ws, 1, 0, 0, 0, OPCODE_CLOSE, iov, 2);
+}
+
+int websock_ping(struct websock *ws, const void *data, size_t length)
+{
+ /* checks the length */
+ if (length > 125) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ return websock_send(ws, 1, 0, 0, 0, OPCODE_PING, data, length);
+}
+
+int websock_pong(struct websock *ws, const void *data, size_t length)
+{
+ /* checks the length */
+ if (length > 125) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ return websock_send(ws, 1, 0, 0, 0, OPCODE_PONG, data, length);
+}
+
+int websock_text(struct websock *ws, int last, const void *text, size_t length)
+{
+ return websock_send(ws, last, 0, 0, 0, OPCODE_TEXT, text, length);
+}
+
+int websock_text_v(struct websock *ws, int last, const struct iovec *iovec, int count)
+{
+ return websock_send_v(ws, last, 0, 0, 0, OPCODE_TEXT, iovec, count);
+}
+
+int websock_binary(struct websock *ws, int last, const void *data, size_t length)
+{
+ return websock_send(ws, last, 0, 0, 0, OPCODE_BINARY, data, length);